以前 MySQL 的 “RENAME DATABASE” 指令, 已經在 5.1.23 後的版本刪除, 原因是重新命名資料庫時存在資料遺失的風險。
以下示範用 “RENAME TABLE” 指令及 mysqldump 指令, 替資料庫重新命名的方法:
RENAME TABLE
這個方法適合資料庫比較大的情況, 但缺點是需要對每個資料表逐一執行。
先建立一個空白的資料庫, 名稱用要變更的資料庫名稱, 以下假設舊資料庫是 oldname; 新資料庫是 newname:
1 2 |
CREATE DATABASE newname; Query OK, 1 row affected (0.05 sec) |
然後把資料表逐一用 RENAME 指令從 oldname 搬到 newname:
1 |
RENAME TABLE oldname.table TO newname.table; |
上面指令需要對每個資料表逐一執行。
如果不想逐個資料表執行, 可以使用以下指令, 它會從 “show tables” 讀取資料表列表, 然後自動執行 rename, 以下是例子需要將 “password” 修改成 mysql root 的密碼, 並將新、舊資料庫名稱改成實際需要:
1 2 |
$ mysql -u root -ppassword oldname -sNe 'show tables' | while read table; \ do mysql -u root -ppassword -sNe "rename table oldname.$table to newname.$table"; done |
mysqldump
如果資料庫不是很大, 可以用 mysqldump 指令完成:
$ mysqldump -u root -p -v oldname > oldname.sql
$ mysqladmin -u root -p create newname
$ mysql -u root -p newname < oldname.sql
$ mysqladmin -u root -p create newname
$ mysql -u root -p newname < oldname.sql