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レポジトリの追加が完了したら、最新のPXBをインストールします。2017/11/10現在、最新のPXBのバージョンは2.4.8です。
xtrabackup
コマンドからバージョンを確認します。
バックアップを取得する
今回はyumでインストールしたMySQL 5.7.20を使用します。yumでのMySQLインストール方法は「第10回 yum, rpmインストールにおけるMySQL 5.6とMySQL 5.7の違い」をご確認ください。
それでは、xtrabackup
コマンドを使用してバックアップを取得してみましょう。バックアップを取得にはbackup
オプションを使用します。
今回はUNIXのソケット接続にて、公式マニュアルに沿った方法で、ローカル環境へフルバックアップを取得します。
今回設定したオプションについて、簡単に説明します。
オプション名 | デフォルト | 内容 |
backup | FALSE | バックアップを作成する |
target-dir | ./xtrabackup_backupfiles/ | バックアップファイルの保存先ディレクトリ |
datadir | なし | MySQLのデータディレクトリ(my.cnfのdatadirと同様) |
user | なし | MySQLユーザ名 |
password | なし | MySQLパスワード |
socket | なし | MySQLソケット |
- TCP/IPを介して接続する場合は、host, portオプションを使用します。
- 正常終了後は
completed OK!
が出力されます。
target-dir
内にバックアップしたファイルが格納されます。
ここで、いくつかおすすめのオプションを紹介します。
parallel
オプション
- 複数のデータファイルを同時にコピーするために使用するスレッド数を指定できます。デフォルトは1です。
history
オプション
PERCONA_SCHEMA.xtrabackup_history
テーブルを作成してバックアップ履歴を管理します。デフォルトはFALSEです。
slave-info
オプション
- スレーブからバックアップを取得する場合は、このオプションが便利です。マスターのバイナリログの位置を記録した
xtrabackup_slave_info
ファイルがtarget-dir
に生成され、リストアしてレプリケーションを再構築する時に使用します。デフォルトは FALSEです。
その他にxtrabackup
コマンドには圧縮、差分バックアップや暗号化するなどさまざまなオプションが存在します。詳しくはマニュアル「The xtrabackup Option Reference 」を参照してください。
リストアする
続いて、先程取得したバックアップを基にリストアしてみましょう。リストア先のMySQLが起動している場合は停止して、リカバリ作業とファイルの配置作業を実施します。
リカバリ
まずは、prepare
オプションを使用してリカバリ作業が必要です。これは、前述にあるInnoDBログファイルの更新情報をibdファイルに適用して、一貫性のあるデータベースにすることです。
target-dir
オプションにバックアップディレクトリを指定します。
- 正常終了後は
completed OK!
が出力されます。
ファイルの配置
その後、リストアします。リストアは、バックアップファイルを指定したMySQLのデータディレクトリに配置する作業です。copy-back
とmove-back
オプションが存在します。
copy-back
は以前作成したバックアップ内のすべてのファイルをバックアップディレクトリから元の場所にコピーします。
move-back
は以前作成したバックアップのすべてのファイルをバックアップディレクトリから元の場所に移動します。バックアップファイルはすべて削除されます。
今回はcopy-back
を使用します。
target-dir
オプションにバックアップディレクトリを指定します。
datadir
オプションにMySQLのデータディレクトリを指定します。指定したディレクトリは空である必要があります。
- 正常終了後は
completed OK!
が出力されます。
最後に、chown
コマンドでデータディレクトリ配下をmysqlユーザに変更します。
MySQLを起動してリストア完了となります。
Percona XtraBackupのバージョンによる違い
PXBは、バージョンによってバックアップを取得できるMySQLのバージョンが異なります。公式ドキュメント上には以下のようになっています。
MySQL バージョン | PXB2.0 | PXB2.1 | PXB2.2 | PXB2.3 | PXB2.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-24
をpercona-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には存在します。公式ドキュメントをよく読んで、いろいろと試してみてください。