MySQLのレプリケーションでLast_SQL_Errno: 1594が出た場合の対処方法

投稿者: | 2014年8月7日

MySQLのスレーブノードで下記のようなエラーが発生して、レプリケーションが停止してしまった場合の対処方法。

Last_SQL_Errno: 1594
Last_SQL_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master’s binary log is corrupted (you can check this by running ‘mysqlbinlog’ on the binary log), the slave’s relay log is corrupted (you can check this by running ‘mysqlbinlog’ on the relay log), a network problem, or a bug in the master’s or slave’s MySQL code. If you want to check the master’s binary log or slave’s relay log, you will be able to know their names by issuing ‘SHOW SLAVE STATUS’ on this slave.

エラー内容を読むと、マスターサーバーのバイナリーログが破損しているか、ネットワーク障害などでスレーブサーバーがマスターサーバーから取得したリレーログが破損しているのでエラーが発生したんじゃないかなということらしい。

もしマスターサーバーのバイナリーログが破損していないなら、スレーブサーバーで失敗した場所から、もう一度、リレーログの取得をし直せばレプリケーションが再開できるはず。

ということでスレーブのリレーログが破損している場合には、下記の手順を実行することで復旧をすることができた。

まずスレーブのサーバーで下記のコマンドを実行する。

mysql>
show slave status\G

表示されたパラメーターのうち下記のマスターサーバのバイナリーログファイルの名前とバイナリーログのどこまでスレーブに転送されたかの情報が必要なのでメモを取っておく。

Master_Log_File: mysql-bin.000001
Exec_Master_Log_Pos: 1111111111

次に、スレーブのサーバーでスレーブとしての動作をとめる。

mysql> stop slave;

次に、スレーブの状態をリセットする。

mysql> reset slave;

次に、先ほど取得した、Master_Log_FileとExec_Master_Log_Posの情報をもとに下記のコマンドを実行して、マスターのバイナリーログからの読出し位置を変える。

mysql> change master to master_host=’the-master-host’, master_user=’replication-user’, master_password=’the-password’, master_log_file=’mysql-bin.000001′, master_log_pos=1111111111;

最後に、スレーブを再開する。

mysql> start slave;

うまくいけば、エラーが消えてレプリケーションが再開できるはず。

マスターのバイナリーログが破損していて復旧できなかった場合には、マスターのダンプを取得して、スレーブにリストアして、レプリケーションを再開するしかない?

MySQLのチューニング その1

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください