MySQL道普請便り

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

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 を参照してください。

リストアする

続いて、先程取得したバックアップを基にリストアしてみましょう。リストア先のMySQLが起動している場合は停止して、リカバリ作業とファイルの配置作業を実施します。

リカバリ

まずは、prepareオプションを使用してリカバリ作業が必要です。これは、前述にあるInnoDBログファイルの更新情報をibdファイルに適用して、一貫性のあるデータベースにすることです。

# xtrabackup --prepare --target-dir=/backup
  • target-dirオプションにバックアップディレクトリを指定します。
  • 正常終了後はcompleted OK!が出力されます。

ファイルの配置

その後、リストアします。リストアは、バックアップファイルを指定したMySQLのデータディレクトリに配置する作業です。copy-backmove-backオプションが存在します。

  • copy-backは以前作成したバックアップ内のすべてのファイルをバックアップディレクトリから元の場所にコピーします
  • move-backは以前作成したバックアップのすべてのファイルをバックアップディレクトリから元の場所に移動しますバックアップファイルはすべて削除されます。

今回はcopy-backを使用します。

xtrabackup --copy-back --target-dir=/backup  --datadir=/var/lib/mysql
  • target-dirオプションにバックアップディレクトリを指定します。
  • datadirオプションにMySQLのデータディレクトリを指定します。指定したディレクトリは空である必要があります。
  • 正常終了後はcompleted OK!が出力されます。

最後に、chownコマンドでデータディレクトリ配下をmysqlユーザに変更します。

# chown -R mysql:mysql /var/lib/mysql

MySQLを起動してリストア完了となります。

Percona XtraBackupのバージョンによる違い

PXBは、バージョンによってバックアップを取得できるMySQLのバージョンが異なります。公式ドキュメント上には以下のようになっています。

MySQL バージョンPXB2.0PXB2.1PXB2.2PXB2.3PXB2.4
5.0××××
5.1 + builtin InnoDB××××
5.1 + InnoDB plugin×
5.5
5.6
5.7××××
  • MySQL5.0 と 5.1 + builtin InnoDB はPXB2.0のみサポートしています。
  • MySQL5.1 + InnoDB plugin は最新のPXB2.4ではなくPXB2.3である必要があります。
  • MySQL5.7 は 最新のPXB2.4のみサポートしています。

PXB2.3をインストールするには前述のpercona-xtrabackup-24percona-xtrabackup-23と変更してください。

また、yumレポジトリからはPXB2.2以降がインストール可能なため、PXB2.0が必要な場合は Download Percona XtraBackup のversionから選択してダウンロードする必要があります。

また、PXB2.2とPXB2.3の間には大きな変化があります。PXB2.2とそれ以前では、トランザクション対応/非対応のストレージエンジンが混在しているMySQLに対してバックアップを取得する際に、innobackupexコマンドというxtrabackupコマンドをラップしたコマンドが用意されていて、それを使用しなければなりません。

PXB2.3とそれ以降は、xtrabackupコマンドがinnobackupexのすべて機能をサポートするようになりました。innobackupexコマンドは今後廃止される予定です。

まとめ

今回はオンラインでのバックアップ取得ツール Percona XtraBackupについて紹介しました。ここでは紹介しきれない様々オプションがPXBには存在します。公式ドキュメントをよく読んで、いろいろと試してみてください。

おすすめ記事

記事・ニュース一覧