MySQL 資料庫備份種類與常用工具匯總(一)
備份是資料庫生存底線。依據資料量、業務容忍度、恢復目標(RPO/RTO)選擇適當策略。
一、按備份範圍分類
| 類型 | 內容 | 耗時/空間 | 適用場景 | 頻率建議 |
| 完全備份 | 整個資料庫(結構+資料+索引+視圖+程序) | 最大 | 基準線、災難恢復 | 每週 1 次 |
| 增量備份 | 自上次備份(完全/增量)以來的變更 | 最小 | 高頻保護、RPO 分鐘級 | 每小時/每天 |
| 差異備份 | 自上次完全備份以來的所有變更 | 中等 | 恢復較簡單(僅需完全+最新差異) | 每天 1 次 |
| 檔案級備份 | 複製資料檔(.ibd/.MYD/.frm 等) | 視檔案大小 | 極大資料庫、檔案系統快照 | 配合存儲快照 |
二、按資料庫狀態分類
| 類型 | 狀態 | 特點 | 工具 |
| 冷備份 | 資料庫關閉 | 最簡單、一致性最好、需停機 | cp、tar、rsync |
| 熱備份 | 資料庫運行中 | 不影響業務、依賴 Binlog/Redo Log | xtrabackup、MEB、LVM 快照 |
| 邏輯備份 | 運行中 | 導出 SQL/CSV、跨版本遷移易、恢復慢 | mysqldump、mydumper、SELECT INTO OUTFILE |
三、常用備份工具對比
| 工具 | 類型 | 優點 | 缺點 | 適用場景 |
| mysqldump | 邏輯 | 官方內建、跨版本、可壓縮、單表/單庫靈活 | 大數據慢、單線程、鎖表(無 --single-transaction) | 中小資料庫(<50GB)、遷移、開發環境 |
| mydumper/myloader | 邏輯 | 多線程並行、壓縮、一致性快照、速度快 5-10 倍 | 需額外安裝、恢復需 myloader | 大數據庫邏輯備份首選 |
| Percona XtraBackup | 物理熱備 | 不鎖表、增量備份、壓縮、流式傳輸、恢復快 | 僅支援 InnoDB/XtraDB、需相同版本恢復 | 生產環境大數據庫首選 |
| MySQL Enterprise Backup (MEB) | 物理熱備 | 官方支援、壓縮、加密、增量、單表恢復、GUI | 商業授權、僅 Enterprise 版 | 企業級生產、合規要求 |
| LVM/ZFS 快照 | 物理 | 秒級建立、不影響 IO、可掛載驗證 | 需檔案系統支援、快照保留空間 | 雲端/虛擬化環境 |
| binlog + 完全備份 | PITR | 任意時間點恢復 | 需完整 binlog 鏈、恢復需重放耗時 | 核心業務 RPO=0 |
四、生產環境建議策略
- 每日 1 次完全備份(xtrabackup/mydumper)+ 每小時增量備份(xtrabackup --incremental)
- 保留策略:完全備份 30 天、增量 7 天、Binlog 7 天
- 異地備份:同步至異地儲存(S3、NFS、異地機房)
- 定期驗證:每月至少 1 次恢復演練,記錄 RTO
- 監控告警:備份成功/失敗、耗時、檔案大小、磁碟空間
五、mysqldump 關鍵參數速查
# 完全備份(單線程,含結構與資料)
mysqldump -uroot -p --single-transaction --master-data=2 --flush-logs --routines --triggers --events -A > full_$(date +%F).sql
# 僅結構
mysqldump -uroot -p -d -A > struct_$(date +%F).sql
# 單表
mysqldump -uroot -p db table > table_$(date +%F).sql
# 壓縮
mysqldump ... | gzip > backup_$(date +%F).sql.gz
關鍵參數:--single-transaction(InnoDB 一致性不鎖表)、--master-data=2(輸出 CHANGE MASTER 註釋)、--routines/triggers/events(導出程序/觸發器/事件)。