首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 災難恢復實戰:基於 XtraBackup 全備+增備+Binlog 精確時間點恢復

     編輯:MySQL 資料庫相關知識

場景假設

  • 業務庫:test.a 表持續寫入
  • 備份工具:Percona XtraBackup(物理熱備份,支持增量、流式、壓縮)
  • 故障:數據目錄損壞/誤刪,需恢復到故障前最近一致狀態

演練時間線

T1: 正常運行,插入數據
T2: 全量備份 (Base)
T3: 插入數據
T4: 增量備份 (Inc1, 基於 Base)
T5: 插入數據
T6: 故障發生 (數據目錄清空)
T7: 恢復操作

備份階段操作

1. 全量備份

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/

2. 增量備份

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/

3. 關鍵:保留故障前的 Binlog

# 故障前將數據目錄下的 mysql-bin.* 複製到備份目錄
cp /var/lib/mysql/mysql-bin.* /backup/binlog_backup/

此步極其關鍵:增備只覆蓋到 T4,T4-T6 間的寫入僅存在於 Binlog 中。

恢復階段操作

1. 應用日志(Prepare 階段)

# 全備應用日志
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/

2. 還原數據文件

innobackupex --copy-back /backup/2024-01-15_10-00-00/

3. 修正權限並啟動

chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld

4. 定位 Binlog 起始位點

cat /backup/2024-01-15_10-30-00/xtrabackup_binlog_info
# 輸出示例:
# mysql-bin.000005  3694

此文件由 XtraBackup 在增備完成時自動記錄,表示增備一致性位點對應的 Binlog 文件名與 Position。

5. 重放 Binlog 完成增量恢復

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

6. 驗證數據一致性

mysql -uroot -pxxx -e "SELECT COUNT(*) FROM test.a;"
# 對比故障前記錄的行數

關鍵技術點總結

環節關鍵點風險提示
增備基礎--incremental-basedir 指向最近一次成功的全備/增備目錄鏈路斷裂導致無法應用增量
Binlog 保留故障前主動複製 Binlog 到異地數據目錄清空時 Binlog 同步丟失,無法精確恢復
xtrabackup_binlog_info增備元數據文件,提供精確位點手動指定位點極易出錯
恢復順序全備Prepare → 增備Prepare → Copy-back → 啟動 → Binlog重放順序錯誤導致數據不一致

生產環境建議

  1. 自動化腳本封裝全流程,消除手工操作風險
  2. 備份存儲異地(對象存儲/異地機房),定期演練恢復
  3. 監控備份耗時、磁盤空間、Binlog 增長速率
  4. 大庫考慮 --parallel 並行備份、--compress 壓縮、--stream=xbstream 流式傳輸

掌握「全備+增備+Binlog」三位一體恢復鏈路,是 DBA 從「會備份」進階到「敢恢復、能恢復、準恢復」的核心技能標誌。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved