背景
MySQL用groongaプラグイン「mroonga」を使っていると、色々厄介な問題に直面する。たとえば、そのままのPercona xtrabackupではデータベースの保存ができない。
本稿は、xtrabackupをmroongaに対応させた時の記録。
インストール
こちらの神様がmroonga対応パッチを書いてくださっているが、随分前のバージョンなので困ったなぁと思っていた。
探してみると、こちらの仏様がXtrabackupの2.2.11用を提供してくださっている。ありがたや。
2015/10/01現在では、決して2.2.11は最新ではないが、古いというわけでもない。今回は楽しよう。
※ 自分で最新化する場合は、sub backup_files
の中のclosedir(DIR);
の前で、mroongaを対象とする記載を入れていけば良いようだ。
xtrabackupのインストール
というわけで、xtrabackupを 2.2.11 でインストールする。
パッケージはここからバージョン指定で入手してインストールする。
$ wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.2.11/binary/redhat/6/x86_64/percona-xtrabackup-2.2.11-1.el6.x86_64.rpm
$ rpm -ivh percona-xtrabackup-2.2.11-1.el6.x86_64.rpm
patch適用
続いて、mroonga patchを手に入れ、innobackupex
に適用する。
下記手順でパッチは、(感謝しながら) wgetでホームディレクトリにダウンロードしている。
$ wget http://www.teamgedoh.net/warehouse/innobackupex-mroonga.patch
それでは、適用してみよう。
$ cd /usr/bin/
$ ls -l innobackupex
-rwxr-xr-x 1 root root 187056 May 25 23:02 innobackupex
$ patch -p1 innobackupex < ~/innobackupex-mroonga.patch
# 以下のように出力される
patching file innobackupex
以上で準備OK。
実行
xtrabackupのラッパーツールinnobackupexを使用してバックアップを取得する。
参考: http://buta9999.hatenablog.jp/entry/20131120/1384972041
バックアップ
手順
細かい指定がなくても、自動的にmy.cnf
から設定をデータディレクトリの場所を読み込んでくれる。便利。
$ nohup innobackupex --user=root /var/tmp/test/ > /tmp/nohup.log &
この手順で、/var/tmp/test
以下にYYYY-mm-dd_HH-MM-SS
という名前でディレクトリが作成され、バックアップが取得される。
実験結果
約15GBのデータ量で5分 ほどで取得が完了した。
リストア
手順
このバックアップされたファイルをそのまま/var/lib/mysql
などのデータディレクトリに配置しても良いようだが、コマンドでリストアする例を記載する。
まずログの適用をする。最後にcompleted OKとなることを確認する。
$ innobackupex --user=root --apply-log /var/tmp/test/2015-09-29_14-20-02/
### 略
150929 14:50:34 innobackupex: completed OK!
リストアを実行する。
以下のコマンドで 自動的に元のフォルダの位置にリストア してくれる。
$ innobackupex --copy-back /var/tmp/test/2015-09-29_14-20-02
実験結果
先ほどの15GBほどのデータが 3分ほどで完了!
追加手順
innodbのlog_file系のパラメータがバックアップ/リストア時点で異なる場合は、MySQL起動前にib_logfile*を削除する。
また、 ファイルの権限が変わっている可能性が高い ので、以下のようなコマンドで権限を戻しておこう。
$ chown -R mysql:mysql /var/lib/mysql
全て準備出来たらmysqldサービスを起動すればリストア完了。
補足
Slaveを複製する用途で使用するときはオフィシャルドキュメントに詳しく書かれている。