首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 修改資料庫名稱實戰:RENAME DATABASE 被廢棄後的標準遷移方案

     編輯:MySQL 綜合教學

背景

MySQL 5.1 曾短暫引入 RENAME DATABASE,但在 5.1.23 即因數據丟失風險移除。生產環境需改名時,標準做法是 「建新庫 → 批量 RENAME TABLE 跨庫移表 → 校驗 → 刪舊庫」,全程在線、無需導出導入、秒級完成。

三步走腳本

1. 創建目標庫

mysql> CREATE DATABASE db_v2;

2. 生成跨庫 RENAME TABLE 腳本

mysql> SELECT CONCAT('RENAME TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' TO db_v2.', TABLE_NAME, ';')
    -> INTO OUTFILE '/tmp/rename_to_db_v2.sql'
    -> FROM INFORMATION_SCHEMA.TABLES
    -> WHERE TABLE_SCHEMA = 'sbtest';  -- 替換為源庫名

生成文件示例:

RENAME TABLE sbtest.t1 TO db_v2.t1;
RENAME TABLE sbtest.t2 TO db_v2.t2;
...

3. 執行遷移

mysql> SOURCE /tmp/rename_to_db_v2.sql;

原理:RENAME TABLE 在同一實例內僅修改數據字典元數據,不搬移物理數據文件,故極快且原子性(單表級)。

避坑指南

風險點應對
視圖/存儲過程/觸發器不會被 RENAME TABLE 移動需手動 SHOW CREATE VIEW/PROCEDURE/TRIGGER 重建到新庫
外鍵約束引用舊庫名5.6+ 支援跨庫外鍵,遷移前暫時 SET FOREIGN_KEY_CHECKS=0,遷移後驗證再開啟
權限不隨表遷移遷移後對新庫重新 GRANT,或編寫腳本同步 mysql.db/tables_priv
應用連接池緩存舊庫名配置變更後滾動重啟應用,或使用 DNS/Proxy 透明切換

驗證清單

-- 1. 表數量一致
SELECT TABLE_SCHEMA, COUNT(*) FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA IN ('sbtest','db_v2') GROUP BY TABLE_SCHEMA;

-- 2. 行數抽樣核對
SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='db_v2';

-- 3. 應用端冒煙測試

總結:雖無 RENAME DATABASE,但 RENAME TABLE db1.t TO db2.t 配合 INFORMATION_SCHEMA 批量生成腳本,提供了零停機、零數據拷貝、秒級完成的最佳實踐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved