mysql數據庫更名的三種方法

前不久去面試,被問到Innodb引擎的表如何改數據庫名,當時我也只回答了MyISAM改如何操做,被一些細節問題戰勝,真是操蛋。mysql

若是表示MyISAM那麼能夠直接去到數據庫目錄mv就能夠。面試

Innodb徹底不行,本身測試過,會提示相關表不存在。sql

 

第一種方法:數據庫

1
RENAME database olddbname TO newdbname

這個是5.1.7到5.1.23版本能夠用的,可是官方不推薦,會有丟失數據的危險安全

 

第二種方法:bash

1.建立須要改爲新名的數據庫。
2.mysqldum 導出要更名的數據庫
3.刪除原來的舊庫(肯定是否真的須要)
固然這種方法雖然安全,可是若是數據量大,會比較耗時,哎,當時連這種方法都沒有想到,真有想死的衝動。測試

 

第三種方法:spa

我這裏就用一個腳本,很簡單,相信你們都看的懂code

複製代碼orm

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
# 假設將sakila數據庫名改成new_sakila
# MyISAM直接更改數據庫目錄下的文件便可
mysql -uroot -p123456 -e  'create database if not exists new_sakila'
 
list_table=$(mysql -uroot -p123456 -Nse  "select table_name from information_schema.TABLES where TABLE_SCHEMA='sakila'" )
 
for  table  in  $list_table
do
     mysql -uroot -p123456 -e  "rename table sakila.$table to new_sakila.$table"
done

這裏用到了rename table,改表名的命令,可是若是新表名後面加數據庫名,就會將老數據庫的表移動到新的數據庫,因此,這種方法即安全,又快速。

 

實例配置:

cat weifeng_rename.sh #!/bin/bash # 假設將weifeng數據庫名改成weifeng_test mysql -uroot -p123456 -e 'create database if not exists weifeng_test' list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='weifeng'") for table in $list_table do mysql -uroot -p123456 -e "rename table weifeng.$table to weifeng_test.$table"
done
相關文章
相關標籤/搜索