配置好mysql主从复制后,重启服务器后发现Slave_SQL_Running: No
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.218.128
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-a-bin.000002
Read_Master_Log_Pos: 1989
Relay_Log_File: lzk-virtual-machine-relay-bin.000007
Relay_Log_Pos: 915
Relay_Master_Log_File: master-a-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
直接使用start slave命令依然开启不了
解决办法:
1.关闭slave线程
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)
2.跳过slave的一个错误
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
Query OK, 0 rows affected (0.00 sec)
3.重新启动slave
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
输入命令查看slave状态,发现slave已经成功开启
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.218.128
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-a-bin.000002
Read_Master_Log_Pos: 1989
Relay_Log_File: lzk-virtual-machine-relay-bin.000009
Relay_Log_Pos: 323
Relay_Master_Log_File: master-a-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
原因分析
由于数据的不同步,在执行主从同步的时候,出现了执行不了的sql,导致从机事务回滚,所以sql的进程就被关闭了。
常见的这个问题的出现方式:
在从机上进行了写操作(非双机热备情况下)。
slave机器重启,事务回滚。
各种原因导致的数据不同步。
sql_slave_skip_counter
sql_slave_skip_counter以event为单位skip,直到skip完第N个event所在的event group才停止。对于事务表,一个event group对应一个事务;对于非事务表,一个event group对应一条SQL语句。一个event group包含多个events。
delete在从库找不到对应行,sql_slave_skip_counter可能省事,但极有可能跳过其他events,导致主从数据不一致。对于1032、1062错误尽量修补数据,让复制进程在从库应用变更。