MySQL半同步复制-答疑解惑-master dump线程等待slave的ACK是死等吗

1、master dump线程在发送binlog后会等待slave的ACK。由repl_semi_after_send_event函数完成。这里等待是死等还是有超时时间限制呢?

调用情况:repl_semi_after_send_event->readSlaveReply->my_net_read->net_read_packet->net_read_packet_header->

net_read_raw_loop->vio_read_buffer->vio_read->vio_socket_io_wait->vio_io_wait(vio, event, timeout)->poll

这里的timeout值是vio->read_timeout。改值是由变量net_read_timeout控制,默认是30s。所以并不是死等,而是有超时时间的。

2、同样在slave IO线程中,也有等待接收binlog的函数。

handle_slave_io->read_event->cli_safe_read->my_net_read->net_read_packet->net_read_packet_header->

net_read_raw_loop->vio_read_buffer->vio_read->vio_socket_io_wait->vio_io_wait(vio, event, timeout)->poll

这里的timeout是由slave_net_timeout变量控制。在5.7.7版本之前默认是3600s,之后包括5.7.7默认值是60s

注:关于MySQL中的几个网络超时变量,可以参考下面文章进行学习

https://yq.aliyun.com/articles/86603

你可能感兴趣的:(MySQL源码分析,MySQL源码研究)