mysql:replicate_error
目次
レプリケーションのエラー対応
Query caused different errors on master and slave.
エラー内容を見て、エラーになったSQLがスキップして問題なければスキップする
mysql> stop slave; mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; (エラーをスキップ) mysql> start slave; mysql> show slave status \G
Last_IO_Errno: 1236
システムリブート時などの発生することが多いエラー。
『スレーブがマスターの情報読み出しを行ったが、マスターに存在しない位置情報をもとに読み込もうとしている』という状況で、
- スレーブの設定ミス
- マスターがログ情報破棄、破損
など。
他の問題が発生していない前提で、スレーブの情報を再設定するのが簡単。
マスター側で
mysql> SHOW MASTER STATUS; +----------------+-----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +----------------+-----------+--------------+------------------+ | bin-log.000069 | 228146254 | | | +----------------+-----------+--------------+------------------+ 1 row in set (0.00 sec)
スレーブ側で
mysql> CHANGE MASTER TO MASTER_HOST='192.168.10.21', MASTER_USER='root', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000069', MASTER_LOG_POS=228146254;
Last_IO_Errno: 1594
Last_Errno: 1594
Last_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 *************************** 1. row *************************** Slave_IO_State: Master_Host: 1.2.3.4 Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000230 Read_Master_Log_Pos: 618693587
レプリケーションを停止する。
mysql> stop slave;
レプリケーションを再設定する。
mysql> reset slave all; mysql> CHANGE MASTER TO MASTER_HOST='1.2.3.4', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000230', MASTER_LOG_POS=618693587;
レプリケーションを再開する。
mysql> start slave;
mysql/replicate_error.txt · 最終更新: 2014/12/04 06:42 by clownclown