バイナリログのマージ
何かしらの事情でバイナリログが作成されるディレクトリを変更したときに,そのログをマージする手順について検証したのでまとめ.
準備
通常のバイナリログ設定は以下の通り.
$ less /etc/my.cnf --- : # binary logging - not required for slaves, but recommended log-bin=/log/mysql-binlog/binlog :
一時的なバイナリログ(=テンポラリーログ)設定は以下の通り.
$ less /etc/my.cnf --- : # binary logging - not required for slaves, but recommended log-bin=/log/mysql-binlog2/binlog :
データベース名は hoge とし,作成済みとする.
手順
1.テーブルの作成,データ'a'の登録
# mysql -uUSER -pPASSWORD -Dhoge mysql> create table t (id char(1)) type=innodb; mysql> insert into t values('a'); mysql> select * from t; mysql> \q
2.テンポラリーログを参照するように設定を変更する
# /etc/init.d/mysql.server stop # vi /etc/my.cnf #log-bin=/log/mysql-binlog2/binlog # /etc/init.d/mysql.server start
3.データ'B'の登録
# mysql -uUSER -pPASSWORD -Dhoge mysql> insert into t values('B'); mysql> select * from t; mysql> \q
4.通常のログを参照するように設定を変更する
# /etc/init.d/mysql.server stop # vi /etc/my.cnf #log-bin=/log/mysql-binlog/binlog # /etc/init.d/mysql.server start → このとき /log/mysql-binlog/binlog.000002 が作成されることを確認
5.MySQL を停止する
# /etc/init.d/mysql.server stop
6.テンポラリーログのコピー
# cp /log/mysql-binlog2/binlog.000001 /log/mysql-binlog/binlog.000002
7.MySQL を起動して登録データの確認
# /etc/init.d/mysql.server start → このとき /log/mysql-binlog/binlog.000003 が作成されることを確認 # mysql -uUSER -pPASSWORD -Dhoge mysql> select * from t; → 登録データが a, B のみであることを確認 mysql> \q
8.バイナリログからのリカバリを行う
# /etc/init.d/mysql.server stop # vi /etc/my.cnf #バイナリログを無効にする # /etc/init.d/mysql.server start # mysql -uUSER -pPASSWORD -Dhoge mysql> drop table t; mysql> \q # mysqlbinlog /log/mysql-binlog/binlog.000001 | mysql -uUSER -pPASSWORD # mysql -uUSER -pPASSWORD -Dhoge mysql> select * from t; → 登録データが a のみであることを確認 mysql> \q # mysqlbinlog /log/mysql-binlog/binlog.000002 | mysql -uUSER -pPASSWORD # mysql -uUSER -pPASSWORD -Dhoge mysql> select * from t; → 登録データが a, B のみであることを確認 mysql> \q # mysqlbinlog /log/mysql-binlog/binlog.000003 | mysql -uUSER -pPASSWORD # mysql -uUSER -pPASSWORD -Dhoge mysql> select * from t; → 登録データが a, B のみであることを確認 mysql> \q