2013年6月1日土曜日

slave再設定時のエラー

先日、データベースが高負荷のため調査の際に再起動を行ったりレプリケーションを停止したので、
slave側のレプリケーションの再設定を行おうとしたら、次のエラーが出てしまいCHANGE MASTER TOコマンドが実行できませんでした:(;゙゚'ω゚'):
CHANGE MASTER TO
     MASTER_HOST='192.168.0.23',
     MASTER_USER='レプリケーションユーザー',
     MASTER_PASSWORD='パスワード',
     MASTER_PORT=3306,
     MASTER_LOG_FILE='mysql-bin.000261',
     MASTER_LOG_POS=107,
     MASTER_CONNECT_RETRY=10;
ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
エラーログには次のように書かれていました。
130601 11:11:41 [ERROR] log ./mysql-relay-bin.000006 listed in the index, but failed to stat
130601 11:11:41 [ERROR] Error counting relay log space
何でも知っているgoogle先生に聞くと、
RESET SLAEVすれば直るよ!ってことで実行してみても直らず・・・orz

とりあえず、実行してから再度CHANGE MASTER TOコマンドを実行しても状況は変わらず(´;ω;`)ウッ…

暫く、悩んだ結果、mysqlのディレクトリを見てみると、
「=mysql-relay-bin.index」というファイル名がある事に気づく。

ls -alt /var/lib/mysql/
合計 929508
-rw-rw----   1 mysql mysql      4512  5月 31 18:33 2013 mysql-error.log
drwxr-xr-x   5 mysql mysql     36864  5月 31 18:33 2013 .
-rw-rw----   1 mysql mysql        19  5月 31 18:33 2013 mysql-bin.index
-rw-rw----   1 mysql mysql       107  5月 31 18:33 2013 mysql-bin.000001
-rw-rw----   1 mysql mysql       126  5月 31 18:33 2013 mysql-relay-bin.000001
-rw-rw----   1 mysql mysql        30  5月 31 18:33 2013 relay-log.info
-rw-rw----   1 mysql mysql     17475  5月 31 18:33 2013 =mysql-relay-bin.index
-rw-rw----   1 mysql mysql         0  5月 31 18:33 2013 master.info
srwxrwxrwx   1 mysql mysql         0  5月 31 18:26 2013 mysql.sock
-rw-rw----   1 mysql mysql   1687947  5月 31 18:26 2013 mysql-slow.log
-rw-rw----   1 mysql mysql 268435456  5月 31 18:26 2013 ib_logfile0
-rw-rw----   1 mysql mysql 413138944  5月 31 18:26 2013 ibdata1
drwx------   2 mysql mysql      4096  5月 31 18:10 2013 mysql
-rw-rw----   1 mysql mysql 268435456  5月 30 23:26 2013 ib_logfile1
drwxr-xr-x. 30 root  root       4096  3月 25 03:00 2013 ..
drwx------   2 mysql mysql      4096  3月  2 21:21 2013 performance_schema
drwx------   2 mysql mysql      4096  3月  2 21:21 2013 test
正確には気づいていたけど、自分がバックアップ用に作ったファイルだと思ってスルーしてました。
ただ、ちゃんとみると日付が新しくなっている事に・・・(´・ω`・)エッ?

中身を見てみると下記のようにと書かれていて使われている感じ((((;゜Д゜))))ガクガクブルブル

./mysql-relay-bin.000001
./mysql-relay-bin.000002
./mysql-relay-bin.000003
./mysql-relay-bin.000004
./mysql-relay-bin.000005
./mysql-relay-bin.000006
./mysql-relay-bin.000007
./mysql-relay-bin.000008
./mysql-relay-bin.000009

:
:
省略
:
:

./mysql-relay-bin.000675
./mysql-relay-bin.000676
./mysql-relay-bin.000677
./mysql-relay-bin.000678
./mysql-relay-bin.000679
./mysql-relay-bin.000680
./mysql-relay-bin.000681
./mysql-relay-bin.000682
./mysql-relay-bin.000683
./mysql-relay-bin.000684
./mysql-relay-bin.000685
./mysql-relay-bin.000686
./mysql-relay-bin.000687
./mysql-relay-bin.000688
./mysql-relay-bin.000689
./mysql-relay-bin.000690
./mysql-relay-bin.000691
./mysql-relay-bin.000692
./mysql-relay-bin.000693
./mysql-relay-bin.000694
./mysql-relay-bin.000695
./mysql-relay-bin.000696
./mysql-relay-bin.000697
./mysql-relay-bin.000698
./mysql-relay-bin.000001
./mysql-relay-bin.000002
./mysql-relay-bin.000003
./mysql-relay-bin.000004
./mysql-relay-bin.000005
./mysql-relay-bin.000006
これはもしかして・・・my.cnfの名前に=がついてるんじゃ・・・(; ・`д・´)
/etc/my.cnfを確認してみると(/ω・\)チラッ
relay-log-index==mysql-relay-bin
イコール二つキタ――(゜∀゜)――!!

バックアップ用に作ったファイルでは無くて、実際に使われているファイルでした。

というか、バックアップファイルで頭にイコールつける事なんてないのに、
どうしてそういう勘違いしていたのかと小一時間ほど問い詰め(ry

とりあえず、名前を直します:(;゙゚'ω゚'):
relay-log-index=mysql-relay-bin
my.cnfの修正をした後に、再起動して設定を反映させる前に
どうせ今使ってる「=mysql-relay-bin.index」は使わなくなから
手動で削除してから試しにCHANGE MASTERを実行してみること。

まずは、「=mysql-relay-bin.index」を削除
rm /var/lib/mysql/=mysql-relay-bin.index
消えた事を確認する。
ls -alt /var/lib/mysql
合計 928020
drwxr-xr-x   7 mysql mysql     36864  6月  1 11:30 2013 .
-rw-rw----   1 mysql mysql       444  6月  1 11:30 2013 mysql-error.log
-rw-rw----   1 mysql mysql       126  6月  1 11:30 2013 mysql-relay-bin.000007
-rw-rw----   1 mysql mysql        30  6月  1 11:30 2013 relay-log.info
-rw-rw----   1 mysql mysql         0  6月  1 11:30 2013 master.info
-rw-rw----   1 mysql mysql       107  6月  1 11:29 2013 mysql-bin.000001
-rw-rw----   1 mysql mysql        19  6月  1 11:29 2013 mysql-bin.index
-rw-rw----   1 mysql mysql       126  6月  1 11:16 2013 mysql-relay-bin.000006
-rw-rw----   1 mysql mysql       126  6月  1 11:11 2013 mysql-relay-bin.000005
-rw-rw----   1 mysql mysql       194  6月  1 03:30 2013 mysql-slow.log
-rw-rw----   1 mysql mysql 268435456  5月 31 23:10 2013 ib_logfile0
-rw-rw----   1 mysql mysql 413138944  5月 31 23:10 2013 ibdata1
-rw-rw----   1 mysql mysql 268435456  5月 31 23:10 2013 ib_logfile1
drwx------   2 mysql mysql      4096  5月 31 19:00 2013 mysql
-rw-rw----   1 mysql mysql       126  5月 31 18:42 2013 mysql-relay-bin.000004
-rw-rw----   1 mysql mysql       126  5月 31 18:41 2013 mysql-relay-bin.000003
-rw-rw----   1 mysql mysql       126  5月 31 18:40 2013 mysql-relay-bin.000002
-rw-rw----   1 mysql mysql       126  5月 31 18:33 2013 mysql-relay-bin.000001
srwxrwxrwx   1 mysql mysql         0  5月 31 18:26 2013 mysql.sock
drwxr-xr-x. 30 root  root       4096  3月 25 03:00 2013 ..
drwx------   2 mysql mysql      4096  3月  2 21:21 2013 performance_schema
drwx------   2 mysql mysql      4096  3月  2 21:21 2013 test
mysqlでmasterとslaveの情報をリセットする。
mysql> RESET MASTER;
Query OK, 0 rows affected (0.01 sec)

mysql> RESET SLAVE;
Query OK, 0 rows affected (0.00 sec)
このタイミングではrelay-log.info、mysql-relay-bin.indexは作られないみたい。
master.info、relay-log.infoが消えて、本来はリレーログの連番も初期化される。
※ただし、今回はリレーログの連番がリセットされない。これは別問題っぽいです。ページ下部に理由記載しています。
ls -alt /var/lib/mysql
合計 928016
drwxr-xr-x   7 mysql mysql     36864  6月  1 11:30 2013 .
-rw-rw----   1 mysql mysql       107  6月  1 11:30 2013 mysql-bin.000001
-rw-rw----   1 mysql mysql        19  6月  1 11:30 2013 mysql-bin.index
-rw-rw----   1 mysql mysql       444  6月  1 11:30 2013 mysql-error.log
-rw-rw----   1 mysql mysql       126  6月  1 11:30 2013 mysql-relay-bin.000007
-rw-rw----   1 mysql mysql       126  6月  1 11:16 2013 mysql-relay-bin.000006
-rw-rw----   1 mysql mysql       126  6月  1 11:11 2013 mysql-relay-bin.000005
-rw-rw----   1 mysql mysql       194  6月  1 03:30 2013 mysql-slow.log
-rw-rw----   1 mysql mysql 268435456  5月 31 23:10 2013 ib_logfile0
-rw-rw----   1 mysql mysql 413138944  5月 31 23:10 2013 ibdata1
-rw-rw----   1 mysql mysql 268435456  5月 31 23:10 2013 ib_logfile1
drwx------   2 mysql mysql      4096  5月 31 19:00 2013 mysql
-rw-rw----   1 mysql mysql       126  5月 31 18:42 2013 mysql-relay-bin.000004
-rw-rw----   1 mysql mysql       126  5月 31 18:41 2013 mysql-relay-bin.000003
-rw-rw----   1 mysql mysql       126  5月 31 18:40 2013 mysql-relay-bin.000002
-rw-rw----   1 mysql mysql       126  5月 31 18:33 2013 mysql-relay-bin.000001
srwxrwxrwx   1 mysql mysql         0  5月 31 18:26 2013 mysql.sock
drwxr-xr-x. 30 root  root       4096  3月 25 03:00 2013 ..
drwx------   2 mysql mysql      4096  3月  2 21:21 2013 performance_schema
drwx------   2 mysql mysql      4096  3月  2 21:21 2013 test
次にCHANGE MASTERコマンドを実行する。
CHANGE MASTER TO
     MASTER_HOST='192.168.0.23',
     MASTER_USER='レプリケーションユーザー',
     MASTER_PASSWORD='パスワード',
     MASTER_PORT=3306,
     MASTER_LOG_FILE='mysql-bin.000261',
     MASTER_LOG_POS=107,
     MASTER_CONNECT_RETRY=10;
OKキタ――(゜∀゜)――!!

CHANGE MASTER TOが正常に実行されたので、
my.cnfで設定した名前で新たにmysql-relay-bin.indexが作られる。

その中身を確認すると、「./mysql-relay-bin.000008」の一行だけになっていました。
view /var/lib/mysql/mysql-relay-bin.index
./mysql-relay-bin.000008
恐らく、今回のエラーの原因は「mysql-relay-bin.index」に、
いらないリレーログのファイル名が入っていたせい・・・?

もしくは、このサーバーのmysqlはなぜかリレーログを自動で消してくれなくて、
HDDを圧迫していたので、少し前に手動でリレーログを消していたせいで、
リレーログ関係がおかしくなっていたとか・・・?
※リレーログはSQLスレッドが必要なくなったら自動で消されるらしい。
確か、RESET SLAVEを実行するとリレーログの連番が初期化されるはずなのに、
初期化されなかったりしてたのは気になっていました(゚д゚)(。_。)(゚д゚)(。_。) ウンウン

なので、念のためにrelay-log.infoとmysql-relay-bin.indexのRelay_Log_Fileの名前が一致しているか確認した方が良いかも?

relay-log.infoの確認
view /var/lib/mysql/relay-log.info
./mysql-relay-bin.000009
mysql-relay-bin.indexの確認
view /var/lib/mysql/mysql-relay-bin.index
./mysql-relay-bin.000009
以上です(`・ω・´)ゞビシッ!!
参考URL

0 件のコメント:

コメントを投稿