2014年12月29日

MyDumperからxtrabackupへ変更した。

MyDumperがある日を境に「セグメンテーション違反(Segmentation Fault)」と言い出してバックアップができなくなった。

MyDumperのバージョンを0.5系から、0.6系に変えてもダメ、

ulimitコマンドで、色んな値を変えてみたけどダメ。

ちょっと、自分の手が出せる範囲の問題じゃないと諦めて、

以前検討していた、xtrabackupへと切替えました。

その環境構築。

まずはyumからインストールするためにリポジトリの追加。

# rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

# yum list | grep xtrabackup

# yum install percona-xtrabackup.x86_64

インストールはすごく簡単。

--バックアップ

# /usr/bin/innobackupex --user root --password XXX /backup_path

※当初--compressを付けて圧縮してたけど、リストア時に解凍が遅い。。。で、ひとまず圧縮なしで運用することにした。

ここで、Too many open filesが出た。MyDumperが動かなくなった原因も此の辺なんだろうな。

ということで、

# ulimit -n 2048

で、open filesをあげるとxtrabackupはうまく動いた。

-- リストア

まずは、Mysqlをストップしてデータディレクトリを退避して、空のデータディレクトリを作る。

# mv /var/lib/mysql /var/lib/mysql.141229
# mkdir /var/lib/mysql
# innobackupex --user root --password XXX --apply-log /backup_path
# innobackupex --copy-back /backup_path

(※--apply-logしないと、ログを適用しないと一貫性あるバックアップデータにならず、
[Warning] InnoDB: Cannot open table XXX_db/XXX_table from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
とか言われて、テーブル開けません。これでずいぶんとハマりました。)

あんまりオプションないけど、xtrabackupは基本的にmy.cnfの設定で動作する。

今回だと、ディレクトリは、/var/lib/mysqlなので、そこに勝手にデータコピーする。

データのコピーが終わったら、所有者をmysqlユーザーに変更して、起動。

# chown -R mysql:mysql /var/lib/mysql
# /etc/init.d/mysqld start

これでうまく起動すればバックアップ&リストア終了。

今まで論理バックアップでの運用だったから、物理バックアップでの運用も少しづつ決めていかないとな。。。
posted by hana at 18:48| Comment(0) | TrackBack(0) | DB,SQL関連 | このブログの読者になる | 更新情報をチェックする