首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 資料庫重命名五大法:RENAME DATABASE 陷阱、檔案搬移、表重命名與 Shell 自動化

     編輯:MySQL 資料庫相關知識

MySQL 官方曾在 5.1.7 引入 RENAME DATABASE,卻在 5.1.23 移除,主因是可能導致資料遺失。本文整理五種實務可行的資料庫重命名方案,分析優缺點與適用場景,助你避開坑點。

方案對照表

方法適用場景風險/缺點停機時間
1. RENAME DATABASE**已棄用,勿使用**官方移除,可能資料遺失-
2. 搬移資料目錄全庫 MyISAM、可停機InnoDB 不支援、需停機短
3. RENAME TABLE 跨庫表數量少、可接受短暫鎖表大量表需逐一敘述、鎖表時間長中
4. mysqldump 匯出入跨版本/引擎、資料量中等大資料耗時、需雙倍空間長
5. Shell 腳本批次 RENAME TABLE表數量大、自動化部署需 Shell 環境、同方案 3 風險中

方案 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 表無法識別**,僅適合純 MyISAM 環境。

方案 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;

方案 4:mysqldump 匯出匯入(最通用、最安全)

# 1. 匯出結構與資料
mysqldump -u user -p -h host old_db > old_db.sql

# 2. 建立新庫
mysql -u user -p -h host -e "CREATE DATABASE new_db;"

# 3. 匯入
mysql -u user -p -h host new_db < old_db.sql

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

方案 5:Shell 腳本自動化 RENAME TABLE(大量表首選)

#!/bin/bash
mysqlconn="mysql -u user -ppass -h localhost"
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;"

選型建議

  • 生產環境、InnoDB、大資料量:首選方案 4(mysqldump),可結合 --single-transaction 熱備份,不鎖表。
  • 測試環境、表數百張、需自動化:方案 5,建議加入錯誤檢查與 Rollback 機制。
  • 純 MyISAM、可接受停機:方案 2 最快。

重命名資料庫本質上是「建立新物件、轉移資料、刪除舊物件」,選對工具並做好驗證與備份,才能安心操作。

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