資料庫備份是 DBA 的生命線。本文系統梳理 MySQL 備份的分類體系、主流工具對比、物理文件構成、恢復策略與增量備份原理,構建完整的備份知識圖譜。
| 維度 | 分類 | 特點 |
|---|---|---|
| 邏輯備份 | SQL 腳本 (mysqldump) | 可移植、跨版本、壓縮率高、恢復慢、易不一致 |
| 文本文件 (SELECT ... INTO OUTFILE) | 體積小、無結構腳本、恢復需 LOAD DATA | |
| 物理備份 | 冷備 (停機拷貝) | 最簡單、最快、需停機、不適用 7×24 |
| 熱備 (在線備份) | 不停機、工具複雜、引擎相關 |
| 工具 | 適用引擎 | 熱/冷 | 速度 | 特點 |
|---|---|---|---|---|
| mysqldump | 所有 | 邏輯/熱 | 慢 | 單線程、易阻塞、跨版本遷移首選 |
| mysqlhotcopy | MyISAM | 物理/熱 | 快 | 僅 Linux/Unix、鎖表、已棄用 |
| xtrabackup (Percona) | InnoDB/XtraDB/MyISAM | 物理/熱 | 極快 | 支援增量、流式、壓縮、準標準 |
| ibbackup (商業) | InnoDB | 物理/熱 | 極快 | 收費、功能同 xtrabackup |
| 主從複製 | 所有 | 邏輯/熱 | 實時 | 高可用架構副產物、非嚴格備份 |
.frm(結構)、.MYD(數據)、.MYI(索引).ibd(獨立表空間)、ibdata*(共享表空間)master.info、relay-log*、relay-log.indexmy.cnf、pid、socket# 全庫備份(單線程、含鎖)
mysqldump -uroot -p --single-transaction --routines --triggers --events --all-databases > full.sql
# 單庫備份
mysqldump -uroot -p db_name > db.sql
# 恢復
mysql -uroot -p < db.sql
# 完整備份(innobackupex 封裝 xtrabackup,支援 MyISAM)
innobackupex --defaults-file=/etc/my.cnf --user=root --password=xxx /data/backups/
# 增量備份(基於 LSN)
innobackupex --incremental /data/inc_backups/ --incremental-basedir=/data/backups/2023-01-01_00-00-00/
# 恢復準備(apply log)
innobackupex --apply-log /data/backups/2023-01-01_00-00-00/
innobackupex --apply-log --incremental-dir=/data/inc_backups/2023-01-02_00-00-00/ /data/backups/2023-01-01_00-00-00/
# 恢復(停機、拷貝數據目錄、修改權限、啟動)
# 按時間點
mysqlbinlog --stop-datetime="2023-01-01 10:00:00" /var/log/mysql/bin.000001 | mysql -uroot -p
# 按位置點
mysqlbinlog --stop-position=368312 /var/log/mysql/bin.000001 | mysql -uroot -p
針對大數據量、極短備份窗口:
# 1. 刷新表並加全局讀鎖
FLUSH TABLES WITH READ LOCK;
# 2. 創建 LVM 快照(秒級)
lvcreate -L10G -s -n mysql_snap /dev/vg0/mysql
# 3. 釋放鎖
UNLOCK TABLES;
# 4. 掛載快照進行拷貝/備份,不影響主庫服務
工具選型無銀彈,關鍵在於「業務容忍度、數據量級、運維能力」三角權衡中找到平衡點。