本文深入 mysqldump 實戰技巧:分表備份、--add-drop-table 避免恢復衝突、--opt/--quick 加速、--lock-tables/--flush-logs 構建備份檢查點、--compress 跨網傳輸優化、--delayed 減輕目標庫壓力。
# MySQL Dump 6.0 # Host: localhost Database: samp_db # Table structure for table 'absence' CREATE TABLE absence ( student_id int(10) unsigned DEFAULT '0' NOT NULL, date date DEFAULT '0000-00-00' NOT NULL, PRIMARY KEY (student_id,date) ); # Dumping data for table 'absence' INSERT INTO absence VALUES (3,'1999-09-03'); INSERT INTO absence VALUES (5,'1999-09-03'); ...
| 參數 | 作用 | 適用場景 |
|---|---|---|
| --add-drop-table | 輸出 DROP TABLE IF EXISTS | 定期刷新目標庫,避免表已存在報錯 |
| --opt | 啟用優化組(quick、add-drop-table 等) | 常規備份首選,速度最快 |
| --quick | 邊讀邊寫,不緩存整表 | 大表防止 OOM |
| --lock-tables | 備份期間鎖定所有表 | 保證一致性,但阻塞寫入 |
| --flush-logs | 切換二進制日誌 | 構建備份檢查點,配合 --lock-tables |
| --delayed | 輸出 INSERT DELAYED | 恢復時降低目標庫寫入壓力 |
| --compress | 壓縮網絡傳輸 | 跨機遷移節省帶寬 |
# 僅備份核心業務表 mysqldump samp_db student score event absence > gradebook.sql mysqldump samp_db member president > hist-league.sql
# 目標機建庫 mysqladmin -h target_host -u root -p create samp_db # 流式傳輸 mysqldump --opt samp_db | mysql -h target_host -u root -p samp_db # 後續增量同步 mysqldump --opt --add-drop-table samp_db | mysql -h target_host -u root -p samp_db
mysqldump --quick --single-transaction huge_table > huge_table.sql # --single-transaction 替代 --lock-tables(InnoDB 適用),不阻塞寫入
--opt 默認啟用 --lock-tables,備份期間全庫只讀。若業務極其敏感,可拆分為單表備份或使用 --single-transaction(需 InnoDB)。