標籤:for exists rename pad lsp container name comm dbn
前不久去面試,被問到Innodb引擎的表如何改資料庫名,當時我也只回答了MyISAM改如何操作,被一些細節問題打敗,真是操蛋。
如果表示MyISAM那麼可以直接去到資料庫目錄mv就可以。
Innodb完全不行,自己測試過,會提示相關表不存在。
第一種方法:
1 |
RENAME database olddbname TO newdbname |
這個是5.1.7到5.1.23版本可以用的,但是官方不推薦,會有遺失資料的危險
第二種方法:
1.建立需要改成新名的資料庫。
2.mysqldum 匯出要改名的資料庫
3.刪除原來的舊庫(確定是否真的需要)
當然這種方法雖然安全,但是如果資料量大,會比較耗時,哎,當時連這種方法都沒有想到,真有想死的衝動。
第三種方法:
我這裡就用一個指令碼,很簡單,相信大家都看的懂
複製代碼
1234567891011 |
#!/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_testmysql -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_tabledo mysql -uroot -p123456 -e "rename table weifeng.$table to weifeng_test.$table"done
mysql資料庫改名的三種方法