mysqldump 是 MySQL 官方邏輯備份工具,輸出 SQL 腳本,支援跨版本遷移。掌握關鍵參數是高效備份的前提。
| 參數 | 短參數 | 功能說明 | 適用場景/建議 |
|---|---|---|---|
--compatible=name | - | 指定相容模式:ansi, mysql323, mysql40, postgresql, oracle 等 | 跨版本/異構遷移時使用 |
--complete-insert | -c | 完整 INSERT 語句(含欄位名) | 可讀性好,但受 max_allowed_packet 限制,大表不建議 |
--default-character-set=charset | - | 指定導出字符集 | 非 latin1 表必須指定,否則導入亂碼 |
--disable-keys | - | INSERT 前後加 DISABLE/ENABLE KEYS | 僅 MyISAM 有效,大幅提升導入速度 |
--extended-insert | - | 多行合併 INSERT(預設開啟) | 大表必開,用 --skip-extended-insert 關閉 |
--hex-blob | - | 二進位欄位用十六進位導出 | 含 BINARY/VARBINARY/BLOB 必須開啟 |
--lock-all-tables | -x | 全域讀鎖,保證一致性 | 自動關閉 single-transaction,僅小庫或維護窗口用 |
--lock-tables | - | 鎖定當前導出的表 | 僅 MyISAM,InnoDB 請用 single-transaction |
--no-create-info | -t | 僅導出資料,無 CREATE TABLE | 資料遷移、同步場景 |
--no-data | -d | 僅導出結構,無資料 | 結構遷移、審計 |
--opt | - | 綁定多個優化參數(預設開啟) | 含 add-drop-table, lock-tables, extended-insert 等 |
--quick | -q | 流式讀取,不緩存整個結果集 | 大表必須開啟,防止 OOM |
--routines | -R | 導出存儲程序與函數 | 完整備份請加上 |
--single-transaction | - | 啟動交易一致性備份(不鎖表) | InnoDB 必用,配合 --quick |
--triggers | - | 導出觸發器(預設開啟) | 用 --skip-triggers 關閉 |
--master-data=1/2 | - | 輸出 CHANGE MASTER TO,含 Binlog 位置 | 搭建 Slave、時間點恢復必用 |
--flush-logs | - | 備份前切換 Binlog | 配合 master-data 使用 |
/usr/local/mysql/bin/mysqldump \
-u backup_user -p'password' \
--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 backup_user -p'password' \
--default-character-set=utf8 \
--opt --extended-insert=FALSE \
--triggers -R --hex-blob \
--single-transaction --quick \
db_name > db_name_$(date +%F).sql
/usr/local/mysql/bin/mysqldump \
-u backup_user -p'password' \
--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-data=2:輸出註釋掉的 CHANGE MASTER TO--flush-logs:備份瞬間切換新 Binlog,位置精確mysqldump ... | gzip > backup.sql.gz 或管道傳給遠端mysqlbinlog 解析重放--default-character-set 導致中文亂碼--quick 導致客戶端 OOM--lock-tables 造成長時間鎖表-R --triggers --events)掌握 mysqldump 參數組合,根據引擎類型、業務容忍度選擇適當策略,是 DBA 的基本功。