Percona XtraBackup 是開源免費的 InnoDB 物理熱備份工具,**不鎖表、不阻塞寫入**,支援全量與增量備份,是生產環境 MySQL 備份的首選方案。本文演示雙節點全量/增量備份與恢復全流程。
yum install percona-xtrabackup # 需配置 Percona Yum 源
必須在 MySQL 初始化前設定:
[mysqld] innodb_file_per_table=ON
若已初始化需遷移,可用 ALTER TABLE t ENGINE=InnoDB 逐表重建(或參考文中批量修改 SQL)。
mkdir /backups innobackupex --user=root /backups/ # 輸出目錄範例:/backups/2016-07-13_20-27-04/
yum install percona-xtrabackup/backups/2016-07-13_20-27-04/innobackupex --apply-log /backups/2016-07-13_20-27-04/
innobackupex --copy-back /backups/2016-07-13_20-27-04/
chown -R mysql:mysql /var/lib/mysql/* systemctl start mysqld
CREATE TABLE xxoo2 (id INT); INSERT INTO xxoo2 VALUES (1),(10),(83);innobackupex --incremental /backups/ --incremental-basedir=/backups/2016-07-13_20-27-04 # 產生增量目錄:/backups/2016-07-13_23-13-25/
# 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/
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 **未運行**,否則會因現有檔案衝突失敗。innobackupex 退出碼與耗時,納入告警體系。xtrabackup --stream=xbstream 實現流式備份直傳遠端,減少本地磁碟佔用。