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 複製環境必加 |
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
mysqldump -d --routines --triggers --events --default-character-set=utf8mb4 \
-u root -p db_name > schema.sql
mysqldump -t --quick --default-character-set=utf8mb4 \
-u root -p db_name > data.sql
mysqldump --quick --default-character-set=utf8mb4 \
-u root -p db_name tbl1 tbl2 > tables.sql
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
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
--default-character-set=utf8mb4,導入庫/表/連接同為 utf8mb4。autocommit、unique_checks、foreign_key_checks、innodb_flush_log_at_trx_commit=2、增大 innodb_log_file_size。RESET MASTER,或用 --set-gtid-purged=OFF 導出不含 GTID。TRIGGER/EVENT 權限(MySQL 5.7+)。utf8mb4_0900_ai_ci 排序規則),建議同版本或用 --compatible=mysql56。-t 8 8 線程),速度提升 5-10 倍。mysqldump 單線程已成瓶頸。mysqldump 參數繁多但核心就那幾個:**單事務熱備、流式讀取、多行插入、字符集顯式、GTID 位點、本地 SSD 落盤**。把上述「生產全庫熱備份」模板刻進運維 SOP,配合 mydumper 大庫並行、**定期恢復演練**,邏輯備份體系才算合格。物理備份請轉向 XtraBackup。