我想知道,当 master 写入之后,是 master 主动把更新(binlog)分发给 slave 。还是让 slave 自己轮询检查 master 的binlog 啊?
我之前看有些博客说是 pull 模式,但是我是用 wireshark 抓包发现,只有 master 给 slave 的 response (但是没有 slave 给 master 的request)。没有看到 slave 给 master 发包。
我想知道,当 master 写入之后,是 master 主动把更新(binlog)分发给 slave 。还是让 slave 自己轮询检查 master 的binlog 啊?
我之前看有些博客说是 pull 模式,但是我是用 wireshark 抓包发现,只有 master 给 slave 的 response (但是没有 slave 给 master 的request)。没有看到 slave 给 master 发包。
pull 模型
while 1:
slave 发送一个 dump binlog,然后 msater 回复一个 binlog event
push 模型
slave 发送一个 dump binlog
while 1:
msater 回复一个 binlog event
mysql 的主从复制是 master 给 slave 主动发消息,slave 本身不回复任何事情(图中的 ack 是 tcp 的事情,和 mysql 无关)
master 如果三十秒内没有什么实质性的东西可以发给 slave 就会发送一个固定的东西,类似心跳包了。
总结:mysql 的主从复制是 master 主动把数据变更发给 slave
2 回答7.5k 阅读✓ 已解决
2 回答6.7k 阅读✓ 已解决
1 回答5.3k 阅读✓ 已解决
1 回答5k 阅读✓ 已解决
5 回答627 阅读✓ 已解决
1 回答4.3k 阅读
3 回答771 阅读✓ 已解决
MySQL的主从复制时主动推送的,
过程分成三步:
1、master将改变记录到二进制日志(binary log)。
2、slave将master的binary log events拷贝到它的中继日志(relay log);
3、slave重做中继日志中的事件,将改变应用到自己的数据库中。