Percona XtraBackupの概要
Percona XtraBackupは、InnoDBおよびXtraDBストレージエンジン向けに設計されたオープンソースのホットバックアップツールです。稼働中のデータベースに対して非ブロッキングなバックアップを実行可能で、サービス停止なしにデータ整合性を確保できます。MyISAMテーブルのバックアップにも対応していますが、その場合は一時的に読み取りロックがかかります。本ツールは、Percona Server、MySQL、MariaDBなど幅広いデータベース環境で利用可能です。
主要コンポーネント
- pxb-engine: InnoDB/XtraDB専用のバックアップ実行バイナリ
- pxb-manager: pxb-engineをラップし、MyISAMテーブルも含めた包括的なバックアップを提供するスクリプト
- pxb-crypt: バックアップデータの暗号化・復号化ツール
- pxb-stream: バックアップデータのストリーミング圧縮処理を行うユーティリティ
バックアップ生成ファイルの役割
| ファイル名 | 機能 |
|---|---|
| pxb_binlog_position | 最新のバイナリログ位置情報を記録 |
| pxb_redo_position | InnoDBリドゥログの現在位置を示す |
| pxb_checkpoint_info | バックアップの開始LSNと終了LSNを保持(増分バックアップに必須) |
インストール方法
最新バージョンのインストールには、バイナリ配布またはパッケージマネージャーを利用できます。
バイナリインストール手順
# バイナリパッケージのダウンロード
wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.35/binary/tarball/percona-xtrabackup-8.0.35-Linux.x86_64.tar.gz
# 解凍とパス設定
tar xzf percona-xtrabackup-8.0.35-Linux.x86_64.tar.gz
cd percona-xtrabackup-8.0.35-Linux.x86_64/bin
sudo cp pxb-* /usr/local/bin/
sudo ln -s /usr/local/bin/pxb-manager /usr/local/bin/innobackupex
APTリポジトリ経由のインストール(Debian/Ubuntu)
# GPGキーの登録
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8507EFA5
# リポジトリ設定
echo "deb https://repo.percona.com/apt $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/percona.list
echo "deb-src https://repo.percona.com/apt $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/percona.list
# インストール
sudo apt update
sudo apt install percona-xtrabackup-80
バックアップ実行の実践例
事前準備
mysql> CREATE DATABASE db_backup_demo DEFAULT CHARACTER SET utf8mb4;
mysql> USE db_backup_demo;
mysql> CREATE TABLE innodb_table (id INT PRIMARY KEY, content VARCHAR(50)) ENGINE=InnoDB;
mysql> CREATE TABLE myisam_table (id INT, name VARCHAR(30)) ENGINE=MyISAM;
mysql> INSERT INTO innodb_table VALUES (1, 'データサンプルA'), (2, 'データサンプルB');
mysql> INSERT INTO myisam_table VALUES (101, 'ユーザX'), (102, 'ユーザY');
フルバックアップの実施
pxb-manager --user=dbadmin --password=securepass \
--backup --target-dir=/backup/full_backup_$(date +%Y%m%d) \
--datadir=/var/lib/mysql
バックアップの整合性確認
pxb-manager --prepare --target-dir=/backup/full_backup_20231115
この処理では、未コミットのトランザクションをロールバックし、コミット済みデータを一貫性のある状態に整えます。正常終了後、pxb_checkpoint_infoファイルにbackup_type = full-preparedが記録されます。
データ復旧手順
- MySQLサービスの停止:
sudo systemctl stop mysql - データディレクトリのクリア:
sudo rm -rf /var/lib/mysql/* - バックアップからのリストア:
pxb-manager --copy-back \ --target-dir=/backup/full_backup_20231115 \ --datadir=/var/lib/mysql - 所有権の修正:
sudo chown -R mysql:mysql /var/lib/mysql - MySQLサービスの起動:
sudo systemctl start mysql
増分バックアップ戦略
フルバックアップをベースに、変更分のみを効率的にバックアップします。
初回増分バックアップ
# データ変更の実施
mysql> INSERT INTO innodb_table VALUES (3, '追加データC');
# 増分バックアップの実行
pxb-manager --user=dbadmin --password=securepass \
--backup --incremental \
--incremental-basedir=/backup/full_backup_20231115 \
--target-dir=/backup/inc_backup_20231116_01
2回目以降の増分バックアップ
pxb-manager --user=dbadmin --password=securepass \
--backup --incremental \
--incremental-basedir=/backup/inc_backup_20231116_01 \
--target-dir=/backup/inc_backup_20231116_02
増分バックアップの復旧手順
# フルバックアップの事前準備
pxb-manager --prepare --apply-log-only \
--target-dir=/backup/full_backup_20231115
# 最初の増分を適用
pxb-manager --prepare --apply-log-only \
--target-dir=/backup/full_backup_20231115 \
--incremental-dir=/backup/inc_backup_20231116_01
# 2回目の増分を適用
pxb-manager --prepare \
--target-dir=/backup/full_backup_20231115 \
--incremental-dir=/backup/inc_backup_20231116_02
# 最終的なリストア
pxb-manager --copy-back \
--target-dir=/backup/full_backup_20231115 \
--datadir=/var/lib/mysql
ストリーミングと圧縮の活用
ネットワーク帯域やストレージ容量を効率化するための手法です。
tarストリームバックアップ
pxb-manager --user=dbadmin --password=securepass \
--stream=xbstream \
--target-dir=/tmp/stream_backup/ \
/var/lib/mysql | gzip > /backup/dbstream_$(date +%Y%m%d).tar.gz
圧縮バックアップの復旧
mkdir -p /tmp/restore_stream
gzip -dc /backup/dbstream_20231115.tar.gz | xbstream -x -C /tmp/restore_stream
pxb-manager --prepare --target-dir=/tmp/restore_stream
重要な運用ポイント
- バックアップ実行時は
--use-memoryパラメータでメモリ使用量を適切に設定 - バイナリログ位置情報を確認し、Point-in-Time-Recoveryを可能にする
- バックアップストレージには一時ディレクトリ(
/tmp)を使用せず、専用領域を確保 - 定期的にバックアップの復旧テストを実施し、信頼性を確認