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

MySQL 數據庫重命名實戰:MyISAM 直接改目錄 vs InnoDB 遷移表法完整對比

     編輯:MySQL 綜合教學

MySQL 數據庫重命名:兩大引擎兩種方案

MySQL 原生不支援 RENAME DATABASE(早期版本有過但因風險移除)。本文對比 MyISAM 直接改目錄法與 InnoDB 跨庫遷移表法,給出生產環境可執行的標準化操作步驟。

方案一:MyISAM 存儲引擎 —— 直接改目錄名

前提:所有表均為 MyISAM,無外鍵、觸發器、存儲過程依賴

# 1. 停止服務
systemctl stop mysqld

# 2. 重命名數據目錄
mv /var/lib/mysql/old_db /var/lib/mysql/new_db

# 3. 啟動服務
systemctl start mysqld

# 4. 驗證
mysql -e "SHOW DATABASES LIKE 'new_db'; USE new_db; SHOW TABLES;"

⚠️ 風險:InnoDB 表無法此法操作(共享表空間 ibdata1 存儲元數據),強行改名會導致表孤兒化。

方案二:InnoDB 存儲引擎 —— 跨庫 RENAME TABLE 遷移

核心命令:RENAME TABLE old_db.tbl TO new_db.tbl;

# 1. 創建目標庫
CREATE DATABASE new_db CHARACTER SET utf8mb4;

# 2. 刪除源庫表上的觸發器(避免遷移失敗)
-- 查詢觸發器
SELECT TRIGGER_NAME FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA='old_db';
-- 逐個刪除
DROP TRIGGER old_db.trigger_name;

# 3. 批量遷移表(可用腳本生成)
RENAME TABLE old_db.t1 TO new_db.t1, old_db.t2 TO new_db.t2, ...;

# 4. 重建觸發器/存儲過程/視圖
-- 從備份或 SHOW CREATE TRIGGER 還原

# 5. 驗證數據完整性
CHECKSUM TABLE new_db.t1;  -- 對比新舊庫 checksum

# 6. 切換應用配置並觀察
# 7. 確認無誤後刪除舊庫
DROP DATABASE old_db;

自動化遷移腳本模板

#!/bin/bash
OLD_DB=old_db
NEW_DB=new_db
mysql -N -e "SELECT CONCAT('RENAME TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' TO ', '$NEW_DB', '.', TABLE_NAME, ';')
FROM information_schema.TABLES WHERE TABLE_SCHEMA='$OLD_DB';" | mysql

對比總結

維度MyISAM 改目錄InnoDB 遷移表
停機時間極短(僅重啟)取決於表數量/觸發器
風險等級低(純文件操作)中(需處理觸發器/權限)
適用版本所有版本5.0+(支援跨庫 RENAME)
外鍵影響無需先刪外鍵再遷移再建
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved