| 方案 | 原理 | 風險 | 適用場景 | 停機時間 |
| 1. RENAME DATABASE | 元數據改名 | ❌ 官方移除,可能丟數據 | 禁用 | - |
| 2. 文件系統改目錄名 | 停庫 → 改 data/db_name 目錄 → 啟庫 | ⚠️ 僅 MyISAM/靜態表安全,InnoDB 共享表空間會壞 | 純 MyISAM 小庫 | 秒級 |
| 3. 表級 RENAME TABLE | 建新庫 → 逐表 RENAME → 刪舊庫 | ✅ 原子級、支持 InnoDB、可驗證 | 生產標準 | 毫秒/表 |
| 4. mysqldump 導出導入 | 邏輯備份 → 建新庫 → 導入 → 刪舊庫 | ✅ 跨版本/引擎、可壓縮/並行 | 大庫、跨實例 | 分鐘~小時 |
| 5. Shell 腳本自動化方案 3 | 信息 Schema 讀表名 → 批量 RENAME | ✅ 方案 3 自動化,避免手誤 | 表多庫 | 毫秒/表 |
三、 方案 3 标准流程(推薦)
CREATE DATABASE `new_db_name`;
RENAME TABLE `old_db`.`table1` TO `new_db`.`table1`,
`old_db`.`table2` TO `new_db`.`table2`;
-- 批量可用信息 Schema 生成語句
DROP DATABASE `old_db`;
四、 方案 4 mysqldump 流程
mysqldump -u root -p -h localhost old_db > old_db.sql
mysql -u root -p -h localhost -e "CREATE DATABASE new_db"
mysql -u root -p -h localhost new_db < old_db.sql
mysql -u root -p -h localhost -e "DROP DATABASE old_db"
五、 方案 5 Shell 腳本(生產就緒)
#!/bin/bash
mysqlconn="mysql -u root -p'Pass' -S /var/lib/mysql/mysql.sock"
olddb="old_db"; newdb="new_db"
$mysqlconn -e "CREATE DATABASE $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"
六、 必做驗證
CHECKSUM TABLE old_db.table, new_db.table 對比
- 應用端配置更新、煙霧測試
- 監控錯誤日誌 30 分鐘無異常
重命名數據庫屬高風險操作,**方案 3/4/5** 三選一,**方案 1 禁用,方案 2 僅限 MyISAM**,操作前必備份。
- 上一篇文章: MySQL 添加遠程訪問用戶:GRANT ALL PRIVILEGES + FLUSH PRIVILEGES 一條龍
- 下一篇文章: MySQL REPLACE INTO 與 INSERT ... ON DUPLICATE KEY UPDATE 實戰:排序遷移單條 SQL 解決方案
Copyright ©
程式碼之家 All Rights Reserved