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

mysqldump 完全指南:導出導入參數詳解與最佳實踐

     編輯:MySQL 資料庫相關知識

mysqldump 是 MySQL 官方邏輯備份工具,支援結構/數據靈活導出、壓縮、過濾、並行(配合外部工具)。本文系統整理核心參數、典型場景命令模板、導入方式、避坑清單。

核心參數速查表

參數短參作用建議場景
--single-transaction-InnoDB 熱備份:啟動一致性快照,不鎖表**生產 InnoDB 必加**
--quick / -q-q流式讀取(mysql_use_result),不緩存全量結果集**大表必加**,防客戶端 OOM
--lock-tables / -l-l鎖定所有表(MyISAM/混合引擎一致性)僅 MyISAM 或無事務引擎時
--add-drop-table-每表前加 DROP TABLE IF EXISTS導入前自動清理,防報錯
--extended-insert / -e-e多行 INSERT(INSERT INTO ... VALUES (),(),())**默認開啟**,大幅提升導入速度
--add-locks-每表數據前加 LOCK TABLES/UNLOCK TABLES導入時防併發干擾
--routines-R導出存儲過程/函數完整遷移必加
--triggers--triggers導出觸發器(默認開啟)保持默認
--events-E導出 Event 調度器任務完整遷移必加
--no-create-info / -t-t僅導數據,不導建表語句數據同步場景
--no-data / -d-d僅導結構,不導數據結構遷移/審計
--where / -w-w按條件過濾行(如 -w "id>1000")分片導出/歷史歸檔
--compress / -C-C客戶端-服務端傳輸壓縮跨網段/低帶寬環境
--default-character-set-指定連接字符集(建議 utf8mb4)**必加**,防編碼亂碼
--master-data=2-輸出 Binlog 位點(註釋形式),支援從庫搭建主從搭建/時間點恢復
--set-gtid-purged=ON-輸出 GTID 集合(MySQL 5.6+)GTID 複製環境必加

典型場景命令模板

1. 生產全庫熱備份(InnoDB、GTID、壓縮、本地落盤)

mysqldump --single-transaction --quick --routines --triggers --events \
  --master-data=2 --set-gtid-purged=ON --default-character-set=utf8mb4 \
  -u backup_user -p --databases db1 db2 | gzip > /backup/ssd/full_$(date +%F).sql.gz

2. 僅導結構(審計/遷移)

mysqldump -d --routines --triggers --events --default-character-set=utf8mb4 \
  -u root -p db_name > schema.sql

3. 僅導數據(同步/測試)

mysqldump -t --quick --default-character-set=utf8mb4 \
  -u root -p db_name > data.sql

4. 指定表導出

mysqldump --quick --default-character-set=utf8mb4 \
  -u root -p db_name tbl1 tbl2 > tables.sql

5. 分片導出大表(按主鍵範圍)

mysqldump --quick --where="id BETWEEN 1 AND 1000000" \
  -u root -p db_name big_table > part1.sql
mysqldump --quick --where="id BETWEEN 1000001 AND 2000000" \
  -u root -p db_name big_table > part2.sql

6. 導出為 CSV/TSV(供載入其他系統)

mysqldump --tab=/tmp/export --fields-terminated-by=',' \
  --fields-enclosed-by='"' --lines-terminated-by='\n' \
  -u root -p db_name tbl_name
# 生成 tbl_name.sql (結構) + tbl_name.txt (數據)

導入方式

# 1. 客戶端管道導入(最常用)
mysql -u root -p db_name < backup.sql
zcat backup.sql.gz | mysql -u root -p db_name

# 2. 進入客戶端後 source(大文件建議,可見進度)
mysql -u root -p db_name
SOURCE /path/backup.sql;

# 3. 並行導入(需 mydumper/myloader 配合)
myloader -h host -u user -p -d /backup/dir -t 8 -o

避坑清單

  1. 字符集不匹配:導出 --default-character-set=utf8mb4,導入庫/表/連接同為 utf8mb4。
  2. 大表導入卡死:關閉 autocommit、unique_checks、foreign_key_checks、innodb_flush_log_at_trx_commit=2、增大 innodb_log_file_size。
  3. GTID 衝突:新實例導入前 RESET MASTER,或用 --set-gtid-purged=OFF 導出不含 GTID。
  4. 觸發器/事件權限:導入用戶需 TRIGGER/EVENT 權限(MySQL 5.7+)。
  5. 版本不兼容:高版本導出導入低版本可能報錯(如 utf8mb4_0900_ai_ci 排序規則),建議同版本或用 --compatible=mysql56。
  6. 備份未驗證=無備份:每月必演練一次恢復演練,記錄 RTO/RPO。

進階替代:mydumper/myloader

  • 多線程並行導出導入(-t 8 8 線程),速度提升 5-10 倍。
  • 自動分片、斷點續傳、壓縮輸出、一致性快照。
  • 適合 TB 級大庫,mysqldump 單線程已成瓶頸。

總結

mysqldump 參數繁多但核心就那幾個:**單事務熱備、流式讀取、多行插入、字符集顯式、GTID 位點、本地 SSD 落盤**。把上述「生產全庫熱備份」模板刻進運維 SOP,配合 mydumper 大庫並行、**定期恢復演練**,邏輯備份體系才算合格。物理備份請轉向 XtraBackup。

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