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

MySQL 資料庫匯入匯出與資料庫重命名完整指南

     編輯:MySQL 綜合教學

概述

MySQL 資料庫的資料遷移與結構變更是日常運維的高頻操作。本文系統整理 mysqldump 匯出、mysql 匯入、以及資料庫重命名的三種主流方案,並針對各版本相容性、權限要求、最佳實踐給出建議。

一、資料庫匯入

1.1 目標資料庫已存在:單行命令匯入

mysql -u用戶名 -p密碼 資料庫名 < sql檔案路徑

範例:

mysql -uroot -p12345678 test < /root/test.sql
  • 適用於結構與資料完整的 SQL 檔案
  • 需確保目標資料庫已建立且使用者具備完整權限
  • 大檔案建議加入 --max_allowed_packet=1G 參數

1.2 建立新資料庫並匯入:互動模式

mysql -uroot -p12345678
mysql> CREATE DATABASE abc;
mysql> USE abc;
mysql> SOURCE /root/test.sql
  • SOURCE 指令僅在 MySQL 客戶端互動模式下可用
  • 適合需先檢查資料庫字元集、排序規則再匯入的場景
  • 匯入前可執行 SET NAMES utf8mb4; 確保編碼一致

二、資料庫匯出

2.1 使用 mysqldump 匯出單一資料庫

mysqldump -u用戶名 -p密碼 資料庫名 > sql檔案路徑

範例:

mysqldump -uroot -p12345678 abc > /root/abc.sql

2.2 生產環境推薦參數

mysqldump -uroot -p \
  --single-transaction \
  --routines \
  --triggers \
  --events \
  --hex-blob \
  --master-data=2 \
  --databases db_name > backup.sql
參數說明
--single-transactionInnoDB 熱備份必備,取得一致性快照不鎖表
--routines/triggers/events包含存儲過程、觸發器、事件調度器
--hex-blob二進制欄位以十六進制匯出,避免編碼問題
--master-data=2輸出 CHANGE MASTER 註解(從庫建立必備)
--databases輸出 CREATE DATABASE 與 USE 語句,便於重命名匯入

2.3 只匯出結構 / 只匯出資料

# 只匯出結構
mysqldump -uroot -p -d abc > abc_structure.sql

# 只匯出資料
mysqldump -uroot -p -t abc > abc_data.sql

三、資料庫重命名

3.1 RENAME DATABASE 指令(不推薦)

RENAME DATABASE 舊資料庫名 TO 新資料庫名;

限制:

  • 僅 MySQL 5.1.7 ~ 5.1.23 短暫支援,後因資料損壞風險被移除
  • 所有版本均不建議使用,官方文檔明確標記為危險操作

3.2 停服務改目錄名(極不推薦)

  1. 停止 MySQL 服務
  2. 進入資料目錄(通常為 /var/lib/mysql/)
  3. 重命名資料庫目錄
  4. 啟動 MySQL 服務

風險: 僅適用 MyISAM 引擎;InnoDB 共享表空間模式下會導致資料字典不一致,必須配合 innodb_file_per_table=ON 且無外鍵依賴才可嘗試。

3.3 最佳實踐:建新庫 → 匯入 → 驗證 → 刪舊庫

# 1. 匯出(含建庫語句)
mysqldump -uroot -p --databases old_db > old_db.sql

# 2. 修改 SQL 檔案中的資料庫名
sed -i 's/`old_db`/`new_db`/g' old_db.sql

# 3. 匯入新庫
mysql -uroot -p < old_db.sql

# 4. 驗證資料完整性
mysql -uroot -p -e "SELECT COUNT(*) FROM new_db.core_table;"

# 5. 確認無誤後刪除舊庫
mysql -uroot -p -e "DROP DATABASE old_db;"

優勢: 支援所有儲存引擎、跨版本遷移、可同步修改字元集、零風險。

四、常見問題與避坑指南

問題原因解決方案
匯入報錯 Unknown collation來源與目標 MySQL 版本差異導致排序規則不支援匯出時加 --skip-set-charset,匯入前手動 SET NAMES utf8mb4
大檔案匯入中斷max_allowed_packet 過小或網路超時調大參數、使用 pv 監控進度、分檔案匯入
匯出耗時過長鎖表MyISAM 表或未使用 --single-transaction強制使用 InnoDB + 單事務熱備份
觸發器/存儲過程權限錯誤DEFINER 使用者在目標實例不存在匯出加 --skip-definer 或匯入後重建

總結

  • 匯出:生產環境務必使用 mysqldump --single-transaction --routines --triggers --events --master-data=2
  • 匯入:優先使用 mysql < file.sql,大資料量考慮分表並行或 LOAD DATA
  • 重命名:嚴禁 使用 RENAME DATABASE 或直接改目錄,**標準流程:建新庫 → 改 SQL → 匯入 → 驗證 → 刪舊庫**
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved