備份工具對比
| 工具/方式 | 類型 | 適用引擎 | 優點 | 缺點 |
| mysqldump | 邏輯備份 | 全部 | 跨版本、可編輯、支援壓縮、單表/單庫/全庫 | 大表慢、還原慢 |
| mysqlhotcopy | 物理備份 | MyISAM | 極快、鎖表時間短 | 僅限 Linux/Unix、不支援 InnoDB |
| SELECT INTO OUTFILE | 邏輯備份 | 全部 | 可自訂格式(CSV)、應用層易處理 | 需 FILE 權限、不含 DDL |
| 二進制日誌 (binlog) | 增量備份 | 全部 | 即時、支援 PITR (時間點恢復) | 需啟用、佔磁碟、恢復需重放 |
| 檔案級複製 (cp/rsync) | 物理備份 | 全部 | 最快、最簡單 | 需停服務或全域讀鎖、難增量 |
mysqldump 核心參數精選
# MyISAM 推薦
mysqldump -u user -p --default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob --lock-all-tables db_name > db_name.sql
# InnoDB 推薦(線上熱備份)
mysqldump -u user -p --default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob --single-transaction db_name > db_name.sql
# 增量備份基準點(配合 binlog)
mysqldump --master-data=1 --single-transaction --flush-logs db_name > db_name.sql
還原方式
# 1. mysql 客戶端管線
mysql -u user -p db_name < db_name.sql
# 2. SOURCE 指令 (在 mysql 客戶端內)
SOURCE /path/to/db_name.sql;
mysqlhotcopy 實戰 (僅 MyISAM)
# 備份
mysqlhotcopy -h localhost -u user -p pass db_name /backup/dir/
# 還原
cp -rf /backup/dir/db_name /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql/db_name
二進制日誌增量備份流程
- `my.cnf` 啟用:`log-bin=binlog`、`server-id=1`,重啟。
- 備份前 `FLUSH LOGS;` 產生新 binlog,複製舊 binlog 檔案。
- 還原:`mysqlbinlog binlog.000001 | mysql -u user -p db_name`。
- 搭配主從架構:在 Slave 執行備份,零影響主庫。
InnoDB 災難恢復關鍵
- 備份時**必須包含 `ib_logfile*`**(Redo Log),否則崩潰無法恢復。
- 啟用 `innodb_force_recovery=1..6` 可嘗試跳過損壞頁面啟動搶救資料。
備份策略建議
| 業務等級 | 全量備份 | 增量備份 |
| 一般 | 每週 | 每天 |
| 核心 | 每天 | 每小時 |
| 金融/醫療 | 每天 | 每 15 分鐘 (binlog 即時同步至異地) |
黃金法則:採用主從複寫,在 Slave 執行備份,生產環境零影響。