リカバリ

オンラインバックアップ+バイナリログからリカバリする手順.

1.バックアップデータをリストア

  • コマンド MYSQLDUMP で吸い出したデータを流し込む
$ gzip -dc /tmp/backup.dump.gz | mysql

※この作業がバイナリログに書き込まれてしまうため,バイナリログは停止しておくこと

2.バイナリログの内容をリストア

  • MySQL を --log-bin オプションを付けて立ち上げる
  • バイナリログの内容を SQL に変換して,コマンド mysql で流し込む
$ mysqlbinlog hoge-bin.00002 | mysql

例:

1.データベース,テーブルを作成する

$ mysql --user=USER --password=PASSWORD
mysql> create database hoge;
mysql> use hoge;
mysql> create table t (id char(1)) type=innodb;

2.データ a の登録

mysql> insert into t values ('a');
mysql> \q

3.オンラインバックアップを行う

$ mysqldump --user=USER --password=PASSWORD --all-databases --single-transaction --master-data=2 --flush-logs --delete-master-logs | gzip > /tmp/backup.dump.gz

4.データ b の登録

$ mysql --user=USER --password=PASSWORD
mysql> use hoge;
mysql> insert into t values ('b');
mysql> \q

5.MySQL の停止

$ /etc/init.d/mysql.server stop

6.ログが無効な設定ファイルを作成
/etc/my.cnf をコピーして,該当箇所をコメントアウトすればよい.このファイルを MySQL が参照するようにリネームしておくこと.

$ cd /etc
$ cp my.cnf my.cnf.x
$ vi my.cnf  #該当箇所のコメントアウト

7.MySQL の起動

$ /etc/init.d/mysql.server start

8.ダンプとバイナリログを投入する

$ gzip -dc /tmp/backup.dump.gz | mysql --user=USER --password=PASSWORD
$ cd XXX  #バイナリログが保管されているディレクトリ
$ mysqlbinlog ... | mysql --user=USER --password=PASSWORD  #ディレクトリに保管されているバイナリログを投入する

9.MySQL の停止

$ /etc/init.d/mysql.server stop

10.ログが有効な設定ファイルに戻す

$ cd /etc
$ mv my.cnf my.cnf-no-binlog 
$ mv my.cnf.x my.cnf

11.MySQL の起動

$ /etc/init.d/mysql.server start