重命名 MySQL 数据库

我创建了一个名为 hrms的数据库。现在我需要更改数据库名称为 sunhrm。但是,它在 MySQL 工作台中是禁用的。我可以在 Linux 服务器上这样做吗?

309703 次浏览

简而言之,不。通常认为重命名数据库太危险。MySQL 曾经有过这个特性,但后来被移除了。您最好使用工作台将模式和数据导出到 SQL,然后在运行/导入之前更改这里的 CREATE DATABASE 名称。

I don't think you can do this. Basic answers will work in many cases, and in others cause data corruptions. A strategy needs to be chosen based on heuristic analysis of your database. 这就是这个特性被实现的原因,< a href = “ https://stackoverflow. com/questions/12190000/rename-mysql-database/21429268 # comments 21558791 _ 12190318”> 然后删除 。 [医生]

您需要转储 all object types in数据库,创建新命名的数据库,然后导入转储。如果这是一个活的系统,你需要把它关掉。如果不能,则需要设置从此数据库到新数据库的复制。

If you want to see the commands that could do this, @ satshD 有详细资料, which conveys some of the challenges around which you'll need to build a strategy that matches your target database.

您可以在创建新模式“ other _ db”之后,通过 RENAME 语句为“ current _ db”中的每个表执行此操作

RENAME TABLE current_db.tbl_name TO other_db.tbl_name

来源 重命名表语法

如果你需要从命令行做这些事情,只需要复制、调整和粘贴下面的代码片段:

mysql -e "CREATE DATABASE \`new_database\`;"
for table in `mysql -B -N -e "SHOW TABLES;" old_database`
do
mysql -e "RENAME TABLE \`old_database\`.\`$table\` to \`new_database\`.\`$table\`"
done
mysql -e "DROP DATABASE \`old_database\`;"

首先备份称为 HRMS 的旧数据库并编辑脚本文件,将 HRMS 替换为 SUNHRM。在此步骤之后,将数据库文件导入 mysql

对于像我这样没有耐心的 mysql 用户,解决方案是:

/etc/init.d/mysql stop
mv /var/lib/mysql/old_database /var/lib/mysql/new_database
/etc/init.d/mysql start

您可以创建与前一个数据库完全相同的新数据库,然后在创建完成后删除旧数据库。使用 mysqldump 工具创建一个。通过 mysqldump orig_db > orig_db.sql对数据库进行 sql 备份,或者如果需要使用用户名和密码,则运行 mysqldump -u root -p orig_db > orig_db.sql。Orig _ db 是您想要“重命名”的数据库的名称,root 是您登录的用户,orig _ db.sql 是创建的包含备份的文件。现在使用所需的数据库名称创建一个新的空数据库。例如,mysql -u root -p -e "create database new_db"。完成后,运行 mysql -u root -p new_db < orig_db.sql。New _ db 现在作为 orig _ db 的完美副本存在。然后,您可以删除原始数据库,因为它现在已经存在于具有所需数据库名称的新数据库中。

在没有上述所有解释的情况下,简短、快速的步骤如下:

  1. mysqldump -u root -p original_database > original_database.sql
  2. mysql -u root -p -e "create database my_new_database"
  3. mysql -u root -p my_new_database < original_database.sql
  4. mysql -u root -p -e drop database originl_database

Hope this helps and this is a reliable means to accomplish it without using some ad-hoc method that will corrupt your data and create inconsistencies.

可以通过 mysqldump 命令复制数据库,而无需将 dump 存储到文件中:

  1. mysql -u root -p -e "create database my_new_database"
  2. mysqldump -u root -p original_database | mysql -u root -p my_new_database
  3. mysql -u root -p -e "drop database original_database"

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

  1. 使用 mysqldump 或任何数据库工具(如 HeidiSQL、 mysql 管理员等)进行文件备份

  2. Open back up (eg backupfile.sql) file in some text editor.

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

  4. 还原已编辑的 SQL 文件

另一种重新命名数据库或拍摄数据库图像的方法是在数据库选项卡中使用逆向工程选项。它将为数据库创建一个 ERR 关系图。在那里重命名架构。

然后进入文件菜单并进入数据库的导出和转发工程。

然后您可以导入数据库。

如果数据库只包含 MyISAM 表(如果有 InnoDB 表,没有使用这种方法) :

  1. 关闭 MySQL 服务器
  2. 转到 mysqldata目录并重命名数据库目录(注意: 非字母字符需要以特殊方式编码)
  3. 重启服务器
  4. 根据需要调整特权(授予对新数据库名称的访问权)

您可以在一个命令中编写所有的脚本,这样停机时间就只有一两秒钟。