如何快速重命名 MySQL 数据库(更改架构名称)?

在 MySQL 手册的 MySQL涵盖这一点。

通常,我只是转储数据库,然后使用新名称重新导入它。对于大型数据库,这不是一个选择。显然,重RENAME {DATABASE | SCHEMA} db_name TO new_db_name; 做坏事,仅存在于少数几个版本中,并且总体来说是个坏主意

这需要与InnoDB 一起使用 ,后者存储的内容与MyISAM完全不同。

答案

RENAME TABLE old_db.table TO new_db.table;
mysql -u username -ppassword old_db -sNe 'show tables' | while read table; \ 
    do mysql -u username -ppassword -sNe "rename table old_db.$table to new_db.$table"; done
for table in `mysql -u root -ppassword -s -N -e "use old_db;show tables from old_db;"`; do mysql -u root -ppassword -s -N -e "use old_db;rename table old_db.$table to new_db.$table;"; done;
mysqldump -u username -p -v olddatabase > olddbdump.sql
mysqladmin -u username -p create newdatabase
mysql -u username -p newdatabase < olddbdump.sql
mysqladmin -u username -p create newdatabase
mysqldump -u username -v olddatabase -p | mysql -u username -p -D newdatabase

我认为该解决方案更简单,并且是一些开发人员建议的。 phpMyAdmin 对此有一个操作。

从 phpMyAdmin 中,选择要选择的数据库。在选项卡中,有一个称为 “操作” 的选项,转到 “重命名” 部分。就这样。

正如许多人建议的那样,它确实使用新名称创建了一个新数据库,将旧数据库的所有表转储到新数据库中并删除了旧数据库。

在此处输入图片说明

SELECT CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name, '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';
SELECT GROUP_CONCAT('RENAME TABLE $1.', table_name, ' TO $2.', table_name SEPARATOR '; ')
FROM information_schema.TABLES 
WHERE table_schema='$1';

在 MySQL 中模拟缺少的RENAME DATABASE命令:

  1. 创建一个新的数据库
  2. 使用以下命令创建重命名查询:

    SELECT CONCAT('RENAME TABLE ',table_schema,'.',table_name,
        ' TO ','new_schema.',table_name,';')
    FROM information_schema.TABLES
    WHERE table_schema LIKE 'old_schema';
  3. 运行该输出

  4. 删除旧数据库

它取自于 MySQL 中的 “模拟缺少的 RENAME DATABASE 命令”

三种选择:

  1. 创建新数据库,关闭服务器,将文件从一个数据库文件夹移动到另一个数据库文件夹,然后重新启动服务器。请注意,这仅在所有表均为 MyISAM 的情况下才有效。

  2. 创建新数据库,使用 CREATE TABLE ... LIKE 语句,然后使用 INSERT ... SELECT * FROM 语句。

  3. 使用 mysqldump 并重新加载该文件。

cd /var/lib/mysql/
/etc/init.d/mysql stop
mv old-name new-name
cd database/

mv old-name.frm new-name.frm

mv old-name.MYD new-name.MYD

mv old-name.MYI new-name.MYI
/etc/init.d/mysql start
#!/bin/bash
set -e # terminate execution on command failure

mysqlconn="mysql -u root -proot"
olddb=$1
newdb=$2
$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";
done;
$mysqlconn -e "DROP DATABASE $olddb"
$ sh rename_database.sh oldname newname
RENAME TABLE old_db.table TO new_db.table;
mysqladmin -uroot -pmypassword create newdbname
mysqldump -uroot -pmypassword --routines olddbname | mysql -uroot -pmypassword newdbname
mysqladmin -uroot -pmypassword drop olddbname