如何重命名 MySQL 数据库?
MySQL 在线手册已经介绍了有关 RENAME DATABASE 命令的内容(该文档页面不久前已被 Oracle 删除):
该语句在 MySQL 5.1.7 中添加,但被发现有危险并在 MySQL 5.1.23 中删除。
那么,该如何进行呢?理由是:我们从项目的代码名称开始,现在希望数据库名称能够反映项目的最终名称。
答案1
从这Ilan Hazan 的博客文章:
MySQL 不支持数据库重命名。要重命名 MySQL 数据库,您可以执行以下操作之一:
创建新数据库并将旧数据库中的所有表重命名为新数据库中的表:
CREATE database new_db_name; RENAME TABLE db_name.table1 TO new_db_name.table1, db_name.table2 TO new_db_name.table2; DROP database db_name;
在 Linux shell 中,使用 mysqldump 备份旧数据库,然后使用 MySQL 实用程序以新名称恢复转储的数据库。最后,使用 drop database 命令删除旧数据库。对于大型数据库,此选项的性能可能很差。
mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.sql mysql -uxxxx -pxxxx -h xxxx -e "CREATE DATABASE new_db_name" mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.sql mysql -uxxxx -pxxxx -h xxxx -e "DROP DATABASE db_name"
编写一个简单的 Linux 脚本(我最喜欢的解决方案)
#!/bin/bash dbuser=xxxx dbpass=xxxx olddb=xxxx newdb=xxxx mysqlconn="mysql -u $dbuser -p$dbpass -h localhost" $mysqlconn -e "CREATE DATABASE \`$newdb\`" params=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='$olddb'") for name in $params; do sql="RENAME TABLE \`$olddb\`.\`$name\` to \`$newdb\`.\`$name\`" echo "$sql"; $mysqlconn -e "$sql"; echo "Renamed $olddb.$name to $newdb.$name"; done; #$mysqlconn -e "DROP DATABASE \`$olddb\`"
如果您的所有表都是 MyISAM,则可以重命名旧的数据库文件夹名称:
- 关闭 MySQL 服务器,
- 将数据库文件夹名称重命名为新名称,
- 启动 MySQL 服务器。
答案2
MySQL 在这方面有点糟糕。唯一可靠的解决方案是使用phpMyAdmin
。
Login
--> click Scheme
--> click Operations
--> 查找Rename database to:
--> 写入NewName
> click Go
。
就这么简单。所有权限均已转移。
答案3
我发现了一个非常简单的解决方案:关闭 MySQL,重命名数据库目录并重新启动。就这样!
如果您有引用旧名称的 SQL 代码或数据,则有点危险。然后,您还需要在重新启动应用程序之前对其进行更改。但我不需要这样做,但 YMV。
谷歌搜索给出了如下两个提示:
答案4
我使用以下方法重命名数据库
使用 mysqldump 或任何 DB 工具(例如 heidiSQL、mysql 管理员等)备份文件
在某些文本编辑器中打开备份(例如 backupfile.sql)文件。
搜索并替换数据库名称并保存文件。
恢复编辑后的sql文件