偶尔因为断电导致mysql slave 出现复制错误“Could not parse relay log event entry”
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.
先查询下状态
show slave status \G
Master_Host: 192.168.2.51
Master_User: backupuser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000078
Read_Master_Log_Pos: 984673998
Relay_Log_File: memcached-relay-bin.000039
Relay_Log_Pos: 747157846
Relay_Master_Log_File: mysql-bin.000078
Slave_IO_Running: Yes
Slave_SQL_Running: No
Skip_Counter: 0
Exec_Master_Log_Pos: 747157709
Relay_Log_Space: 984679197
如果可以确定主服务器没有问题的话,那么重置下从服务器的同步位置就可以了。
如上可以对应的指令为:
stop slave;
CHANGE MASTER TO MASTER_LOG_FILE = 'mysql-bin.000078', MASTER_LOG_POS =747157709;
start slave;
再用 show slave status \G 查看状态。如下:
Master_Log_File: mysql-bin.000078
Read_Master_Log_Pos: 879029246
Relay_Log_File: memcached-relay-bin.000002
Relay_Log_Pos: 1336369
Relay_Master_Log_File: mysql-bin.000078
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 748493843
Relay_Log_Space: 131871772
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 339469
好了到现在搞定了。
还有说法是内存不够用产生的,有人清除了几个不用的进程释放内存后, stop slave; start slave;然后好了,我遇到的不是这个情况,如果你遇到了,按我上面的不能解决的话,可以试着释放内存看看。