mysql半同步复制原理
2019-11-19 本文已影响0人
乔治大叔
mysql的主备库通过binlog日志保持一致,主库本地执行完事务,binlog日志落盘后即返回给用户;备库通过拉取主库binlog日志来同步主库的操作。
默认情况下,主库与备库并没有严格的同步,因此存在一定的概率备库与主库的数据是不对等的。
半同步特性的出现,就是为了保证在任何时刻主备数据一致的问题。
相对于异步复制,半同步复制要求执行的每一个事务,都要求至少有一个备库成功接收后,才返回给用户。
实现原理也很简单,主库本地执行完毕后,等待备库的响应消息(包含最新备库接收到的binlog(file,pos)),接收到备库响应消息后,再返回给用户,这样一个事务才算真正完成。
在主库实例上,有一个专门的线程(ack_receiver)接收备库的响应消息,并以通知机制告知主库备库已经接收的日志,可以继续执行。