Mysql

如何重命名 MySQL 數據庫?

  • July 9, 2021

如何重命名 MySQL 數據庫?

MySQL 線上手冊中提到了 RENAME DATABASE 命令(該文件頁面已被 Oracle 前段時間刪除):

此語句在 MySQL 5.1.7 中添加,但被發現有危險並在 MySQL 5.1.23 中刪除。

那麼,如何進行呢?理由:我們從項目的代號開始,現在希望數據庫名稱能夠反映項目的最終名稱。

來自Ilan Hazan 的這篇博文:

在 MySQL 中,不支持數據庫重命名。為了重命名 MySQL 數據庫,您可以執行以下操作之一:

  1. 創建新數據庫並將舊數據庫中的所有表重命名為新數據庫:
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;
  1. 在 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"
  1. 編寫一個簡單的 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"
  1. 如果您所有的表都是 MyISAM,您可以重命名舊的數據庫文件夾名稱:

  2. 關閉 MySQL 伺服器,

  3. 將數據庫文件夾名稱重命名為新名稱,

  4. 啟動 MySQL 伺服器。

引用自:https://serverfault.com/questions/195221