问题描述
通过xtraback新备份并还原的slave节点通过change master to动态添加到集群中后,主库执行SQL时卡住。
问题分析
登录主库执行 show processlist;发现有一行为Waiting for semi-sync ACK from slave,马上定位到半同步复制问题。将主库半同步关闭后,SQL执行成功。因需保证数据的一致性,半同步必须要开启,故继续排查原因。
问题处理
检查主库的半同步复制正常。
然后去从库检查从库的半同步配置。发现从库"rpl_semi_sync_slave_enabled"为"off"状态。

image.png
手动set global rpl_semi_sync_slave_enabled=1后,show global variables like 'rpl_semi_sync_slave_enabled';显示已经打开。主库执行命令仍然卡住。

image.png
继续排查问题:
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的状态。