資料是核心資產,備份策略關乎業務生死。本文系統梳理備份分類、工具優劣、對象清單、策略制定與 mysqldump + binlog、LVM 快照 兩大主流方案的完整實戰流程,適用於 MySQL 5.6+ / MariaDB 10+ 環境。
備份分類速覽
| 維度 | 類型 | 特點 |
| 線上狀態 | 冷備份 | 離線,最安全但不可用 |
| 溫備份 | 全域共享鎖,唯讀 |
| 熱備份 | 線上不阻塞,InnoDB 依賴 MVCC |
| 資料範圍 | 完全備份 | 整個資料庫 |
| 部分備份 | 單表/子集 |
| 備份介面 | 物理備份 | 複製資料檔,大資料集快,跨平台差 |
| 邏輯備份 | 導出 SQL 文本,通用慢,佔空間大 |
| 增量策略 | 完全備份 | 每次全量 |
| 增量備份 | 僅備份上次完全後的變化 |
| 差異備份 | 備份上次完全後所有變化 |
常用工具對比
| 工具 | 類型 | 適用場景 | 備註 |
mysqldump | 邏輯/單執行緒 | <5GB 小資料庫 | 支援 --single-transaction 熱備 InnoDB |
mysqldumper | 邏輯/多執行緒 | 多庫並行備份 | 社群維護 |
xtrabackup | 物理/熱備 | 大資料集、生產首選 | Percona 開源,支援增量、壓縮、流式 |
LVM 快照 + cp/tar | 物理/近熱備 | 資料與日誌同卷 | 需全域鎖瞬間凍結,快照建立後釋放 |
SELECT ... INTO OUTFILE | 邏輯/部分 | 單表導出 | 不含結構定義 |
備份對象清單(不可遺漏)
- 資料庫資料(核心)
- MySQL 設定檔(
my.cnf)
- 程式碼物件:Stored Procedure、Function、Trigger、Event
- OS 層設定:crontab、備份腳本、網路配置
- 主從複資訊(
master.info, relay-log.info)
- 二進位日誌(Binlog)
方案一:mysqldump + Binlog 完全恢復實戰
# 1. 完全備份(含結構、資料、例程、觸發器、binlog 位置)
mysqldump -uroot -p --databases hellodb \
--single-transaction --flush-logs --master-data=2 \
--routines --triggers --events > /root/hellodb.sql
# 2. 模擬業務寫入新資料
# 3. 刪除資料庫(模擬災難)
DROP DATABASE hellodb;
# 4. 從 binlog 擷取增量段落
mysqlbinlog --start-position=403 --stop-position=663 mysql-bin.000004 > /tmp/hellodb.inc.sql
# 5. 恢復:關閉 binlog → 還原完全備份 → 重放增量 → 開啟 binlog
SET SESSION sql_log_bin=0;
SOURCE /root/hellodb.sql;
SOURCE /tmp/hellodb.inc.sql;
SET SESSION sql_log_bin=1;
方案二:LVM 快照物理備份流程
- 確認資料目錄在 LVM 邏輯卷上(
mount、lvs)。
FLUSH TABLES WITH READ LOCK; FLUSH LOGS; SHOW MASTER STATUS; 記錄位置。
lvcreate -L 100M -s -n mysql-snap /dev/vg/mysql 建立快照卷。
UNLOCK TABLES; 釋放鎖(業務恢復寫入)。
- 掛載快照
mount -o ro /dev/vg/mysql-snap /mnt,tar/cp 複製資料目錄至備份儲存。
umount /mnt; lvremove /dev/vg/mysql-snap 清理快照。
備份黃金法則
- 備份與生產放在不同磁碟/機房/雲區域。
- 定期(月/季)演練還原,驗證 RTO/RPO。
- 災難恢復後立即執行一次完全備份建立新基準。
- Binlog 與資料檔分盤,並定期備份 Binlog。
- 根據資料量級訂製策略:<10GB 用 mysqldump,>100GB 必上 xtrabackup/LVM。