mysqldump 是 MySQL 官方邏輯備份工具,支援全庫、單表、條件導出、壓縮、主從同步座標等豐富功能。本文系統整理核心參數、常用場景與最佳實踐。
mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db1 [db2 ...]
mysqldump [options] --all-databases
| 類別 | 參數 | 說明 | 建議場景 |
|---|---|---|---|
| 輸出控制 | --no-create-info (-t) | 僅導出資料,不含 CREATE TABLE | 資料遷移、增量同步 |
--no-data (-d) | 僅導出結構 | Schema 比對、建表腳本 | |
--compact | 精簡輸出(抑制註釋、鎖表等) | 大表導出加速 | |
--result-file (-r) | 指定輸出檔(Windows 必備,避免換行符轉換) | 跨平台備份 | |
| 效能優化 | --opt | 啟用 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset(預設開啟) | 通用備份 |
--quick (-q) | 逐行讀取,不緩衝整個結果集 | 大表必加 | |
--extended-insert (-e) | 多值 INSERT,縮小檔案、加快還原 | 預設開啟 | |
--disable-keys (-K) | 導出時暫停非唯一索引更新(MyISAM) | 大量匯入前 | |
--single-transaction | InnoDB 一致性熱備份核心,配合 --quick | 線上熱備份 | |
| 一致性與鎖 | --lock-tables (-l) | 鎖定所有表(READ LOCAL) | MyISAM 靜態備份 |
--lock-all-tables (-x) | 全域讀鎖(FLUSH TABLES WITH READ LOCK) | 多庫一致性備份 | |
--master-data=[1|2] | 輸出 CHANGE MASTER TO(1=可執行,2=註釋),含 binlog 座標 | 主從搭建、PITR | |
--flush-logs (-F) | 備份前切換 binlog | 配合 --master-data | |
| 過濾與格式 | --where (-w) | WHERE 條件導出子集 | 分表、歸檔 |
--tables | 覆蓋 --databases,後續參數視為表名 | 指定多表 | |
--tab (-T) | 產生 .sql (DDL) + .txt (資料) 兩檔,需 FILE 權限 | 大量載入 |
mysqldump --single-transaction --quick --master-data=2 --flush-logs \
--routines --triggers --events \
--databases db1 db2 > /backup/full_$(date +%F).sql
mysqldump --no-data --databases db1 > schema_db1.sql
mysqldump --where="created_at < '2023-01-01'" db1 logs > archive_logs_2022.sql
mysqldump --opt db1 | gzip > db1_$(date +%F).sql.gz
# 完整還原
mysql -u root -p db1 < backup.sql
# 壓縮檔還原
gunzip -c backup.sql.gz | mysql -u root -p db1
# 指定字符集還原(防亂碼)
mysql --default-character-set=utf8mb4 -u root -p db1 < backup.sql
--tab 導出的 .txt 搭配 mysqlimport --use-threads=4 並行載入。--set-gtid-purged=ON 保留 GTID 資訊。--ignore-table=db.tbl。mysqldump -h remote_host -u user -p db1 | mysql -h local_host -u user -p db1 直接跨實例同步。--single-transaction 導致 InnoDB 備份不一致。--quick 導致記憶體暴漲 OOM。-r 導致換行符錯誤。--compatible=mysql40 或手動調整 SQL。