zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

【mysql我能讲两小时042】主从复制有几种方式?分别说说?

mysql 方式 几种 小时 主从复制 分别 我能
2023-09-27 14:29:25 时间

主从复制有几种方式?分别说说?

异步复制

MySQL 默认的复制策 略, Master 处理事务过 程中, 将其写入 Binlog 就会通知 Dump thread 线程处理, 然后完成事 务的提交, 不会关心是否成功发送到任意一个 slave 中

image-20220412191130572

半同步复制

image-20220412191217549

Master处理事务过程中, 提交完事务后, 必须 等至少一个 Slave 将收到的 binlog 写入 relay log 返回 ack 才能继续执行处理用户的事务。

相关配置

rpl_semi_sync_master_wait_point = AFTER_COMMIT 【 这里 MySQL 5.5 并没有这个 配置, MySQL5.7 为了解决半同步的问题而设置 的】

rpl_semi_sync_master_wait_for_slave_count = 1 (最低必须收到多少个 slave 的 ack) rpl_semi_sync_master_timeout = 100 (等待 ack 的超时时间)

增强半同步复制

image-20220412191333973

增强半同步和半同步不同是, 等待 ACK 时间不同

rpl_semi_sync_master_wait_point =AFTER_SYNC (唯一区别)

半同步的问题是因为等待 ACK 的点是 Commit 之后, 此时 Master 已经完成数据 变更, 用户已经可以看到最新数据, 当 Binlog 还未同步到 Slave 时, 发生主从切 换, 那么此时从库是没有这个最新数据的, 用户又看到老数据。

增强半同步将等待 ACK 的点放在提交Commit 之前, 此时数据还未被提交, 外界看不到数据变更, 此时如果发送主从切换, 新库依然还是老数据, 不存在数据不一致的问题。