萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 重命名資料庫 5 大方法:RENAME DATABASE、資料夾改名、RENAME TABLE、mysqldump、Shell 腳本

MySQL 無原生 RENAME DATABASE (5.1.7 短暫存在後移除,有資料遺失風險)。提供 5 種替代方案,按停機容忍度、資料量、權限選擇。

方法 1:RENAME DATABASE (已廢棄,勿用)

RENAME DATABASE old_db TO new_db;  -- 5.1.7~5.1.23 短暫存在,官方文件明確警告可能丟失資料

方法 2:直接改資料目錄名稱 (僅限 MyISAM、需停機)

  1. systemctl stop mysqld
  2. mv /var/lib/mysql/old_db /var/lib/mysql/new_db
  3. systemctl start mysqld

限制:InnoDB 共用表空間 (ibdata1) 存放資料字典,**不適用**;僅限 innodb_file_per_table=ON 且全 MyISAM/獨立表空間 InnoDB。

方法 3:RENAME TABLE 逐表遷移 (線上、無停機、推薦)

CREATE DATABASE new_db;
RENAME TABLE old_db.tbl1 TO new_db.tbl1,
             old_db.tbl2 TO new_db.tbl2,
             ...;
DROP DATABASE old_db;

優點:原子操作、無鎖表 (元數據鎖極短)、InnoDB/MyISAM 通用。
自動化:

SELECT CONCAT('RENAME TABLE ', GROUP_CONCAT(CONCAT('old_db.', TABLE_NAME, ' TO new_db.', TABLE_NAME)), ';')
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'old_db'
INTO @sql;
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;

方法 4:mysqldump 導出導入 (通用、需停寫或鎖表)

# 1. 導出 (加 --single-transaction 熱備份 InnoDB)
mysqldump -u root -p --single-transaction --routines --triggers --events old_db > old_db.sql

# 2. 建新庫
mysql -u root -p -e "CREATE DATABASE new_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

# 3. 導入
mysql -u root -p new_db < old_db.sql

# 4. 驗證無誤後刪舊庫
mysql -u root -p -e "DROP DATABASE old_db;"

方法 5:Shell 腳本自動化 RENAME TABLE (方法 3 強化版)

#!/bin/bash
mysqlconn="mysql -u root -p'pwd' -h localhost"
olddb="old_db"
newdb="new_db"

$mysqlconn -e "CREATE DATABASE IF NOT EXISTS \`$newdb\`;"
tables=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$olddb'")
for t in $tables; do
    $mysqlconn -e "RENAME TABLE \`$olddb\`.\`$t\` TO \`$newdb\`.\`$t\`;"
done
$mysqlconn -e "DROP DATABASE \`$olddb\`;"

選型決策表

方法停機引擎支援速度風險適用場景
改資料夾是MyISAM/獨立表空間極快InnoDB 共用表空間失效純 MyISAM、可停機維護窗口
RENAME TABLE否 (極短鎖)全引擎快極低線上業務、標準首選
mysqldump需一致性鎖/單事務全引擎慢 (大表)中 (導入失敗殘留)跨版本/跨機器/需壓縮備份
Shell 腳本否全引擎快低批量自動化、CI/CD 整合

後續檢查

  • 應用程式連線字串更新
  • 視圖/預存程序/觸發器內硬編碼資料庫名檢查
  • 權限遷移:SHOW GRANTS FOR 'user'@'host'; 重新授權
  • 備份腳本/監控規則同步更新
copyright © 萬盛學電腦網 all rights reserved