问题描述
通过xtraback新备份并还原的slave节点通过change master to动态添加到集群中后,主库执行SQL时卡住。
问题分析
登录主库执行 show processlist;
发现有一行为Waiting for semi-sync ACK from slave
,马上定位到半同步复制问题。将主库半同步关闭后,SQL执行成功。因需保证数据的一致性,半同步必须要开启,故继续排查原因。
问题处理
检查主库的半同步复制正常。
然后去从库检查从库的半同步配置。发现从库"rpl_semi_sync_slave_enabled"为"off"状态。
手动set global rpl_semi_sync_slave_enabled=1
后,show global variables like 'rpl_semi_sync_slave_enabled';显示已经打开。
主库执行命令仍然卡住。
继续排查问题:
show status like 'semi';
发现Rpl_semi_sync_slave_status
为off
状态。从库半同步启动失败了。从库执行
set global rpl_semi_sync_slave_enabled=1;stop slave io_thread;start slave
后,状态正常了。
问题总结
从库半同步配置后需要重启io_thread。配置完从库的半同步不仅要查看variables,也要确认status的状态。