MySQL道普請便り

第59回 Percona XtraBackupを使ってみよう

この記事を読むのに必要な時間:およそ 3 分

Percona XtraBackup(以降,PXB)とは,Percona社が公開しているオンラインでMySQLのバックアップを取得できるOSSツールです。

一般的にMySQLのバックアップはmysqldumpクライアントを使用するかと思います。mysqldumpは論理バックアップであり,データベース内のデータをテキスト(INSERT文)として保存します。そのため,リストアにはINSERT文を使用しなければならず,遅いのが難点です。

今回紹介するPXBは,物理バックアップであり,実際のデータベースのファイルを物理的にコピーすることでバックアップを取得します。リストアはそのファイルに対して,バックアップの開始時間からの差分データをリカバリしてファイルを配置するだけなので,論理バックアップのリストアよりも高速です。

Percona XtraBackupの動作について

PXBは,トランザクションに対応しているInnoDBストレージエンジンであれば,更新をブロックすることなくオンラインでバックアップを取得できます。

それは,バックアップ開始時点から終了するまでの間,すべてのibdファイル(InnoDBのデータファイル)をコピーしながら,InnoDBログファイル(トランザクションログ)も同時にコピーするためです。リストア時はそのInnoDBログファイルの更新情報をibdファイルに適用することで一貫性を保ちます。

そして,すべてのibdファイルをコピーが完了後に,トランザクション非対応のMyISAMやCSVなどのストレージエンジンのファイルをコピーするために,MySQLを一時的に読み取り専用にします。その間はすべての更新は不可能となります。トランザクション非対応のテーブルのコピーを終えると,バックアップが完了となります。

そのようにして,トランザクション対応/非対応のストレージエンジンが混在している環境においても,一貫性のあるバックアップを取得することができます。

Percona XtraBackupのインストール

今回はLinux(CentOS)に,Perconaのyumレポジトリを追加してインストールします。yumレポジトリの追加方法は,公式ドキュメントを参照ください。

# yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

yumレポジトリの追加が完了したら,最新のPXBをインストールします。2017/11/10現在,最新のPXBのバージョンは2.4.8です。

# yum install -y percona-xtrabackup-24

xtrabackupコマンドからバージョンを確認します。

# xtrabackup --version
xtrabackup version 2.4.8 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 97330f7)

バックアップを取得する

今回はyumでインストールしたMySQL 5.7.20を使用します。yumでのMySQLインストール方法は第10回 yum, rpmインストールにおけるMySQL 5.6とMySQL 5.7の違いをご確認ください。

それでは,xtrabackupコマンドを使用してバックアップを取得してみましょう。バックアップを取得にはbackupオプションを使用します。

今回はUNIXのソケット接続にて,公式マニュアルに沿った方法で,ローカル環境へフルバックアップを取得します。

# xtrabackup               \
 --backup                  \
 --target-dir=/backup      \
 --datadir=/var/lib/mysql  \
 --user=root               \
 --password=rootpass       \
 --socket=/var/lib/mysql/mysql.sock

今回設定したオプションについて,簡単に説明します。

オプション名デフォルト内容
backupFALSEバックアップを作成する
target-dir./xtrabackup_backupfiles/バックアップファイルの保存先ディレクトリ
datadirなしMySQLのデータディレクトリ(my.cnfのdatadirと同様)
userなしMySQLユーザ名
passwordなしMySQLパスワード
socketなしMySQLソケット
  • TCP/IPを介して接続する場合は,host, portオプションを使用します。
  • 正常終了後はcompleted OK!が出力されます。
  • target-dir内にバックアップしたファイルが格納されます。
# ls /backup/
backup-my.cnf  ib_buffer_pool  ibdata1  mysql  mydatabase  performance_schema  sys  xtrabackup_checkpoints  xtrabackup_info  xtrabackup_logfile

ここで,いくつかおすすめのオプションを紹介します。

parallelオプション
複数のデータファイルを同時にコピーするために使用するスレッド数を指定できます。デフォルトは1です。
historyオプション
PERCONA_SCHEMA.xtrabackup_historyテーブルを作成してバックアップ履歴を管理します。デフォルトはFALSEです。
slave-infoオプション
スレーブからバックアップを取得する場合は,このオプションが便利です。マスターのバイナリログの位置を記録したxtrabackup_slave_infoファイルがtarget-dirに生成され,リストアしてレプリケーションを再構築する時に使用します。デフォルトは FALSEです。
# cat xtrabackup_slave_info
CHANGE MASTER TO MASTER_LOG_FILE='binlog.000023', MASTER_LOG_POS=2548;

その他にxtrabackup コマンドには圧縮,差分バックアップや暗号化するなどさまざまなオプションが存在します。詳しくはマニュアルThe xtrabackup Option Reference を参照してください。

著者プロフィール

北川健太郎(きたがわけんたろう)

LINE株式会社所属のデータベースエンジニア。担当はMySQLとOracle Database。好きなMySQLの機能はレプリケーションで,好きなOracleDatabaseの機能はログオントリガー。

Twitter:@keny_lala

コメント

コメントの記入