マイネットエンターテイメント Advent Calendar8日目の記事です。
主にiOS, AndroidやUnityなどを担当していますが、かくかくしかじかで2サーバ間のDB移行を実施することがありました。
そこで今回はDB移行ツールでお世話になったinnobackupex(xtrabackup)についてお話します。
DBのバックアップについて
DB移行方法として、mysqldumpを利用することが考えられます。
mysqldumpでバックアップ作成を行うとなると事前確認として、DBをロックした後、logのポジションを確認し、dumpファイルを吐き出し....。そして移行先のDBでリストアを実行するとどえらい時間がかかる...なんてこともあります。急いでる身としては操作ミスするかもしれないし、そんな悠長に待ってられないヨ〜というセッカチな方は、以下に記すinnobackupexを利用すると救われることがあるかもしれません。
ここでは以下の手順について記していきます。
- 移行元DBサーバよりフルバックアップ作成
- 移行元DBサーバから移行先DBサーバへバックアップデータをコピー
- 移行先DBサーバにてリストア
innboackupexとは
これはxtrabackupのperlラッパースクリプトで、バイナリタイプのバックアップツールです。
mysqldumpとは違い、ざっくり言うとdatadir/var/lib/mysql
以下のデータをいい感じでバックアップデータを作成・リストアしてくれるツールです。
インストール
ここではRHEL系のインストール方法を記します。
$ wget http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
$ rpm -ivH percona-release-0.1-3.noarch.rpm
$ yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
以下共通です。
yum list | grep percona
yum install percona-xtrabackup-24
実作業
バックアップ作成 & 移動
移行元サーバにてバックアップ作成と、移行先への移動を一気に行います。1 2
# time innobackupex --user=<mysqluser> --stream=xbstream --compress --no-timestamp /tmp/backup \
| ssh user@otherhost "xbstream -x -C /path/to/backupdir/"
解凍
qpressが必要になりますので、未インストールである場合は導入してください。
# yum install -y qpress
# time innobackupex --decompress /path/to/backupdir
ログ適用
Write Ahead Logを適用します。
# time innobackupex --apply-log /path/to/backupdir
これにてバックアップ先のディレクトリ内にxtrabackup_binlog_info
が作成されます。
スレーブ設定する場合はログポジションにこれを利用してください。
データ移行
以下の操作は、前もってmysqlを停止しておいてください
事前に移行先サーバのdatadir内を一度削除するか、バックアップをとります。
# cp -R /var/lib/mysql /path/to/mysql_backupdir
or
# rm -rf /var/lib/mysql/*
以下のコマンドを実行することで、datadirに対してバックアップデータのコピーが行われます。
# time innobackupex --copy-back /path/to/backupdir
移行完了後の作業
copy-backupが完了したのち、datadirの所有権を修正します。
# chown -R mysql: /var/lib/mysql
以上で完了です。mysqldを起動し、DB移行が完了しているか確認してみましょう。
まとめ
以上の説明はかなりざっくりしたものになります。innobackupexを用いたバックアップ手法は幾つか方法もありますし、現在では外部mysqlからAWSのAuroraへ移すのにもinnobackupexの利用が推奨されています。(DMSでも良いと思います)
ニーズに合わせて適切な利用を心がけるといいと思います。