test.a 表持續寫入T1: 正常運行,插入數據
T2: 全量備份 (Base)
T3: 插入數據
T4: 增量備份 (Inc1, 基於 Base)
T5: 插入數據
T6: 故障發生 (數據目錄清空)
T7: 恢復操作
innobackupex --user=root --password=xxx --defaults-file=/etc/my.cnf \
--port=3306 /backup/ > /backup/innobackup.log 2>&1
假設生成目錄:/backup/2024-01-15_10-00-00/
innobackupex --user=root --password=xxx --defaults-file=/etc/my.cnf \
--port=3306 --incremental --incremental-basedir=/backup/2024-01-15_10-00-00/ \
/backup/
假設生成目錄:/backup/2024-01-15_10-30-00/
# 故障前將數據目錄下的 mysql-bin.* 複製到備份目錄
cp /var/lib/mysql/mysql-bin.* /backup/binlog_backup/
此步極其關鍵:增備只覆蓋到 T4,T4-T6 間的寫入僅存在於 Binlog 中。
# 全備應用日志
innobackupex --apply-log /backup/2024-01-15_10-00-00/
# 增備應用日志 (需指定增量目錄)
innobackupex --apply-log /backup/2024-01-15_10-00-00/ \
--incremental-dir=/backup/2024-01-15_10-30-00/
innobackupex --copy-back /backup/2024-01-15_10-00-00/
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld
cat /backup/2024-01-15_10-30-00/xtrabackup_binlog_info
# 輸出示例:
# mysql-bin.000005 3694
此文件由 XtraBackup 在增備完成時自動記錄,表示增備一致性位點對應的 Binlog 文件名與 Position。
mysqlbinlog --start-position=3694 /backup/binlog_backup/mysql-bin.000005 \
| mysql -uroot -pxxx
若跨多個 Binlog 文件:
mysqlbinlog --start-position=3694 /backup/binlog_backup/mysql-bin.000005 \
/backup/binlog_backup/mysql-bin.000006 \
| mysql -uroot -pxxx
mysql -uroot -pxxx -e "SELECT COUNT(*) FROM test.a;"
# 對比故障前記錄的行數
| 環節 | 關鍵點 | 風險提示 |
|---|---|---|
| 增備基礎 | --incremental-basedir 指向最近一次成功的全備/增備目錄 | 鏈路斷裂導致無法應用增量 |
| Binlog 保留 | 故障前主動複製 Binlog 到異地 | 數據目錄清空時 Binlog 同步丟失,無法精確恢復 |
| xtrabackup_binlog_info | 增備元數據文件,提供精確位點 | 手動指定位點極易出錯 |
| 恢復順序 | 全備Prepare → 增備Prepare → Copy-back → 啟動 → Binlog重放 | 順序錯誤導致數據不一致 |
--parallel 並行備份、--compress 壓縮、--stream=xbstream 流式傳輸掌握「全備+增備+Binlog」三位一體恢復鏈路,是 DBA 從「會備份」進階到「敢恢復、能恢復、準恢復」的核心技能標誌。