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

使用 Percona XtraBackup 實現 MySQL 物理熱備份與增量備份

     編輯:MySQL 資料庫相關知識

Percona XtraBackup 是開源免費的 InnoDB 物理熱備份工具,**不鎖表、不阻塞寫入**,支援全量與增量備份,是生產環境 MySQL 備份的首選方案。本文演示雙節點全量/增量備份與恢復全流程。

安裝 XtraBackup

yum install percona-xtrabackup  # 需配置 Percona Yum 源

前置條件:啟用獨立表空間

必須在 MySQL 初始化前設定:

[mysqld]
innodb_file_per_table=ON

若已初始化需遷移,可用 ALTER TABLE t ENGINE=InnoDB 逐表重建(或參考文中批量修改 SQL)。

Node1:全量備份

mkdir /backups
innobackupex --user=root /backups/
# 輸出目錄範例:/backups/2016-07-13_20-27-04/

Node2:全量恢復(目標節點 MySQL 未啟動)

  1. 安裝 XtraBackup:yum install percona-xtrabackup
  2. 備份目錄移至 /backups/2016-07-13_20-27-04/
  3. 應用日誌(Prepare 階段):
innobackupex --apply-log /backups/2016-07-13_20-27-04/
  1. 複製回資料目錄:
innobackupex --copy-back /backups/2016-07-13_20-27-04/
  1. 修正權限並啟動:
chown -R mysql:mysql /var/lib/mysql/*
systemctl start mysqld

Node1:增量備份流程

  1. 模擬業務寫入:CREATE TABLE xxoo2 (id INT); INSERT INTO xxoo2 VALUES (1),(10),(83);
  2. 基於上次全量備份建立增量:
innobackupex --incremental /backups/ --incremental-basedir=/backups/2016-07-13_20-27-04
# 產生增量目錄:/backups/2016-07-13_23-13-25/
  1. 合併增量到全量(只讀全量 + 重做增量):
# 1. 全量備份設為只讀準備
innobackupex --apply-log --redo-only /backups/2016-07-13_20-27-04/

# 2. 合併增量
innobackupex --apply-log --redo-only /backups/2016-07-13_20-27-04/ --incremental-dir=/backups/2016-07-13_23-13-25/

驗證合併結果(LSN 檢查)

cat /backups/2016-07-13_23-13-25/xtrabackup_checkpoints
# backup_type = incremental
# from_lsn = 1642047
# to_lsn = 1646912

cat /backups/2016-07-13_20-27-04/xtrabackup_checkpoints
# backup_type = full-prepared
# from_lsn = 0
# to_lsn = 1646912  ← 已包含增量 LSN

後續新增量可繼續在同一全量基礎上合併,恢復時僅需拿**合併後的全量目錄**執行 --copy-back。

常見坑點與解決

  • 權限問題:恢復後 /var/lib/mysql 擁有者必須為 mysql:mysql,否則啟動報錯。
  • 目標節點已啟動:--copy-back 要求目標資料目錄為空且 MySQL **未運行**,否則會因現有檔案衝突失敗。
  • 版本相容:XtraBackup 版本需與 MySQL 版本對應(如 2.4 系對應 5.6/5.7,8.0 系對應 8.0)。
  • 非 InnoDB 表:MyISAM/CSV 等非事務引擎在備份瞬間會短暫鎖表(FLUSH TABLES WITH READ LOCK),純 InnoDB 環境可完全無鎖。

生產部署建議

  1. 建立每日全量 + 每小時增量的備份策略,保留 7 天全量、48 小時增量。
  2. 備份檔異地複製(rsync/s3/NFS),定期演練恢復。
  3. 監控 innobackupex 退出碼與耗時,納入告警體系。
  4. 結合 xtrabackup --stream=xbstream 實現流式備份直傳遠端,減少本地磁碟佔用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved