mysqldump 是 MySQL 官方邏輯備份工具,參數豐富但文檔分散。本文系統整理核心參數、MyISAM/InnoDB 差異備份策略、線上備份 --master-data 實戰、還原兩種方式,並給出生產環境常用指令模板。
| 參數 | 短參 | 功能 | 建議場景 |
|---|---|---|---|
--compatible=name | - | 導出相容指定資料庫/版本 (ansi,mysql323,postgresql,oracle...) | 跨版本/異構遷移 |
--complete-insert | -c | 完整 INSERT (含欄位名),提高插入效率但可能超過 max_allowed_packet | 小表/結構複雜表 |
--default-character-set=charset | - | **關鍵:指定導出字元集**,防亂碼 | **所有備份必加** |
--disable-keys | - | INSERT 前後加 DISABLE/ENABLE KEYS,大幅加速 MyISAM 載入 | MyISAM 大表 |
--extended-insert | - | 預設開啟,多列合併 INSERT;設 false 退回單列 | 大表設 false 避免封包過大 |
--hex-blob | - | 二進位欄位 (BINARY/VARBINARY/BLOB) 以十六進位導出 | **含二進位欄位必加** |
--lock-all-tables | -x | 全域讀鎖,保證一致性,關閉 single-transaction/lock-tables | MyISAM 全庫一致性備份 |
--lock-tables | - | 鎖定當前庫所有表 (MyISAM 適用) | MyISAM 單庫備份 |
--no-create-info | -t | 僅導出資料,無 CREATE TABLE | 資料同步/增量 |
--no-data | -d | 僅導出結構,無資料 | 結構遷移/審核 |
--opt | - | **預設開啟**,等同 add-drop-table,add-locks,create-options,disable-keys,extended-insert,lock-tables,quick,set-charset | **一般備份直接用 --opt** |
--quick | -q | **大表必加**,串流讀取不緩存全結果集 | **大表必加** |
--routines | -R | 導出預存程序/函數 | 完整備份必加 |
--single-transaction | - | **InnoDB 線上熱備份核心**,啟動事務一致性視圖,不阻塞寫入 | **InnoDB 必加** |
--triggers | - | 導出觸發器 (預設開啟) | 完整備份 |
--master-data[=1|2] | - | 輸出 CHANGE MASTER TO 陳述式,指定 binlog 座標,支援主從同步建立 | **建立從庫/時間點恢復** |
/usr/local/mysql/bin/mysqldump -u user -p'pwd' \
--default-character-set=utf8 \
--opt --extended-insert=false \
--triggers -R --hex-blob \
--lock-all-tables \
db_name > db_name_$(date +%F).sql
/usr/local/mysql/bin/mysqldump -u user -p'pwd' \
--default-character-set=utf8 \
--opt --extended-insert=false \
--triggers -R --hex-blob \
--single-transaction \
db_name > db_name_$(date +%F).sql
/usr/local/mysql/bin/mysqldump -u user -p'pwd' \
--default-character-set=utf8 \
--opt --master-data=1 \
--single-transaction --flush-logs \
db_name > db_name_$(date +%F).sql
--master-data=1:輸出 CHANGE MASTER TO MASTER_LOG_FILE='...', MASTER_LOG_POS=...; (不註解)。--master-data=2:同上但註解化,僅供參考。--flush-logs:切換 binlog,確保座標對應新檔案起點。/usr/local/mysql/bin/mysql -u user -p'pwd' db_name < db_name.sql
SOURCE /absolute/path/db_name.sql;
| 維度 | MyISAM | InnoDB |
|---|---|---|
| 一致性保證 | --lock-all-tables (全域讀鎖) | --single-transaction (MVCC 快照) |
| 備份期間寫入 | **阻塞** | **不阻塞** |
| 索引重建加速 | --disable-keys 有效 | 無效 (聚集索引無法禁用) |
| 線上備份可行性 | 低 (需鎖表) | 高 (標準做法) |
--default-character-set** 對應資料庫實際字元集。--quick** 避免記憶體爆炸。--hex-blob**。--routines --triggers**。--single-transaction**,**勿加 --lock-tables** (互斥)。掌握 mysqldump 參數組合邏輯,能根據引擎類型、業務容錯度、遷移目的,精準選擇最佳備份策略,確保資料零損失、恢復零驚喜。