Percona XtraBackupを活用したMySQLデータベースの非ブロッキングバックアップ手法

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が記録されます。

データ復旧手順

  1. MySQLサービスの停止: sudo systemctl stop mysql
  2. データディレクトリのクリア: sudo rm -rf /var/lib/mysql/*
  3. バックアップからのリストア:
    pxb-manager --copy-back \
      --target-dir=/backup/full_backup_20231115 \
      --datadir=/var/lib/mysql
  4. 所有権の修正: sudo chown -R mysql:mysql /var/lib/mysql
  5. 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)を使用せず、専用領域を確保
  • 定期的にバックアップの復旧テストを実施し、信頼性を確認

タグ: Percona-XtraBackup MySQL-Backup InnoDB Incremental-Backup database-administration

5月24日 07:09 投稿