以前 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