MySQL 備份策略因業務可用性需求、資料量、引擎類型而異。本文對比「檔案層級複製法」(速成、離線)與「mysqldump 邏輯備份法」(標準、線上),助您依場景選型。
TestA。C:\MySQL\data\TestA 至 HostB 同路徑。TestA 即現且可正常操作。FLUSH TABLES WITH READ LOCK 確保檔案一致性。.ibd 不可用。mysql 使用者。mysqldump [OPTIONS] database [tables...]
若不指定資料表,匯出整個資料庫。
| 選項 | 說明 |
|---|---|
--add-locks | 每張表匯出前加 LOCK TABLES,匯入時加速插入 |
--add-drop-table | 每個 CREATE TABLE 前加 DROP TABLE IF EXISTS |
--allow-keywords | 允許關鍵字作欄位名(以資料表名稱前綴) |
-c, --complete-insert | 完整 INSERT 語法(含欄位名),相容性佳 |
-C, --compress | 客戶端/伺服端支援壓縮時啟用傳輸壓縮 |
--delayed | 使用 INSERT DELAYED(MyISAM 專用) |
-e, --extended-insert | 多值 INSERT(單語句插入多行),大幅縮減檔案體積與匯入時間 |
--quick | 逐行讀取/寫入,不將整個結果集載入記憶體(大表必加) |
--opt | 綜合優化組合:--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset(預設開啟) |
--single-transaction | InnoDB 熱備份關鍵:單一交易快照,不鎖表,保證一致性 |
--master-data=2 | 輸出 CHANGE MASTER TO 註解,記錄 Binlog 位置,支援主從同步 |
--routines --triggers --events | 包含預存程序、觸發器、事件排程器 |
# InnoDB 線上熱備份(含 Binlog 位置、存儲程序、觸發器)
mysqldump --single-transaction --master-data=2 --routines --triggers --events \
--quick --extended-insert --set-charset \
-u backup_user -p'StrongPassword' mydb > mydb_$(date +%F).sql
# 壓縮存檔
gzip mydb_$(date +%F).sql
是否允許停機維護窗口?
├─ 是 → 引擎為 MyISAM? → 是 → 檔案複製法(最快)
│ └─ 否 → mysqldump --opt
└─ 否 → 必須 mysqldump --single-transaction (InnoDB) 或 xtrabackup (物理熱備份)
檔案複製法雖快但限制多、風險高;mysqldump 配合 --single-transaction、--opt、--master-data 是通用標準解。建議建立「每日全備 + 定期增量(Binlog) + 異地同步 + 季度恢複演練」的分級備份體系。