スタッフブログ

ローハイドのスタッフが、日常のこと、ネットで見つけた便利な情報、仕事に役立つとっておきのテクニックを紹介します。

Fight! the Rawhide

2007年6 月29日14:57

MySQLのレプリケーションが止まっていた場合

STAFF BLOG

よこはま

なんと!

運用しているサイトのスレーブ側のレプリケーションが2週間ほど前から止まっていました!!
止まっていたことよりも、それに2週間も気がつかない自分にショックでした・・・

とにかく、くよくよしていてもしかたがないのでとりあえず修復。レプリケーションを再開させます。
原因追及として手がかりになるのは、スレーブ側で出ていたエラーメッセージで、『あるテーブルのidフィールドはユニークなのに重複しているものをインサートしようとしているよ!』ってことでした。なにやら、マスター側でのmigrationが原因なのでしょうか・・・

とりあえず、レプリケーションはバックアップの要素も兼ねているの、早々と復旧させます。

ここから、作業log

■マスター側で現在のポジションを確認
$ mysql -u -p
mysql> show master status;
+—————-+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+—————-+———-+————–+——————+
| db1-bin.000009 | 288992 | | |
+—————-+———-+————–+——————+
こんな、感じ。

■スレーブ側でレプリケーションを停止
$ mysql -u -p
mysql> stop slave;

■現在のポジションで上書き
mysql> change master to master_host=’db1.matatavi.com’,
master_user=’接続ユーザー’,
master_password=’接続パスワード’,
master_log_file=’db1-bin.000009′, #show master statusの内容
master_log_pos=288992; #show master statusの内容

■情報が保存されたか確認
$ cat relay-log.info
./ap1-relay-bin.000001
37784
db1-bin.000009
326731

■スレーブの起動
$ mysql -u -p
mysql> start slave;

これでエラーがでなければ修復完了です。やれやれ・・・
後は、なぜレプリケーションが止まっていたかの追跡を行っていく予定です。

コメントをどうぞ