如何重命名MySQL数据库?


48

如何重命名MySQL数据库?

MySQL在线手册中提到了RENAME DATABASE命令(Oracle早已删除了此文档页面):

该语句是在MySQL 5.1.7中添加的,但是发现它很危险,并在MySQL 5.1.23中被删除。

那么,如何进行呢?基本原理:我们从项目的代码名称开始,现在希望数据库名称能够反映项目的明确名称。


所有四个答案都是有道理的。这个问题有很多可能的解决方案。
2012年


Answers:


59

这个宜兰哈杉的博客文章:

在MySQL中,不支持数据库重命名。为了重命名MySQL数据库,您可以执行以下操作之一:

  1. 创建新数据库并将旧数据库中的所有表重命名为新数据库中的:

    CREATE database new_db_name;
    RENAME TABLE db_name.table1 TO new_db_name, db_name.table2 TO new_db_name;
    DROP database db_name;
  2. 在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"
    
  3. 编写一个简单的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
          $mysqlconn -e "RENAME TABLE $olddb.$name to $newdb.$name";
          echo "Renamed $olddb.$name to $newdb.$name";
    done;
    
    #$mysqlconn -e "DROP DATABASE $olddb"
  4. 如果所有表都是MyISAM,则可以重命名旧数据库文件夹名称:

    1. 关闭MySQL服务器,
    2. 将数据库文件夹名称重命名为新名称,
    3. 启动MySQL服务器。

这是在MySQL中直接在SQL中直接生成重命名表命令的另一种方法:blog.marceloaltmann.com/how-to-rename-a-database-in-mysql
Yves Martin

这将有助于为第一个解决方案创建查询。只需将粘贴结果复制到RENAME TABLE后面即可SELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';
Syclone

但是,如果您不将数据插入新的数据库中,它们将丢失
Rainman 17-02-27

谢谢。这是最好的答案。非常感谢!
typelogic

该脚本非常简洁,在MariaDB 10.1上开箱即用。
吕克

12

MySQL对此很烂。唯一可靠的解决方案是使用phpMyAdmin

Login- > click Scheme- > click Operations- >查找Rename database to:- >写NewName> click Go

就如此容易。所有权限都会被保留。


6
+1为GUI解决方案,但社区Wiki答案中的简单命令和脚本也完全“可靠”
Will Sheppard 2014年

7

我找到了一个非常简单的解决方案:关闭MySQL,重命名数据库目录并重新启动。就这样!

如果您有SQL代码或引用旧名称的数据,则有些危险。然后,您还需要在重新启动应用程序之前进行更改。但是我不需要这样做,但是YMV。

谷歌搜索提供了以下两个指针:

https://stackoverflow.com/questions/67093/how-do-i-quickly-rename-a-mysql-database-change-schema-name

http://www.delphifaq.com/faq/databases/mysql/f574.shtml


5

我倾向于创建一个新数据库,然后将旧数据库中的表转储到.sql文件中(使用mysqldump),编辑该文件,执行某种操作s/old_database/new_database/g,然后将其重新导入到新数据库中。
可能不是最好的方法,但它确实有效。


2

如果您有机会使用MySQL管理工具(例如phpMyAdmin),则可以轻松地对其进行重命名,因为他们会为您创建查询。

在phpMyAdmin中,他们还创建每个表并通过“ INSERT INTO ... SELECT * FROM ...”插入数据。因此,通过链接他们复制了数据。

如果您不能执行此操作,则建议进行转储并将sql-file重新导入到新数据库中。

祝好运!

问候,本。


2

我使用以下方法重命名数据库

  1. 使用mysqldump或任何数据库工具(例如heidiSQL,mysql管理员等)备份文件

  2. 在某些文本编辑器中打开备份文件(例如backupfile.sql)。

  3. 搜索并替换数据库名称并保存文件。

  4. 恢复已编辑的sql文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.