进入MySQL的slave服务器后,查看slave状态:
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.6.120
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: zhangjin1.000001
Read_Master_Log_Pos: 1320277
Relay_Log_File: jin-123-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: zhangjin1.000001
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
可以看到,Slave_SQL_Running的状态是No,原因一般可能有两种:
1、程序可能在slave上进行了写操作。
2、可能是slave机器重启后,事务回滚造成的。
一般情况下,是事务回滚造成的。
解决方法如下:
GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;
Query OK, 0 rows affected (36.89 sec)
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
Query OK, 0 rows affected (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (1.91 sec)
再查看slave服务器状态:
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.6.120
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: zhangjin1.000001
Read_Master_Log_Pos: 1320277
Relay_Log_File: jin-123-relay-bin.000003
Relay_Log_Pos: 283
Relay_Master_Log_File: zhangjin1.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
可以看到,Slave_SQL_Running的状态也是Yes了。