MySQL主备

MySQL主备同步原理
1 备库io_thread通过长连接获取主库的binlog
2 备库sql_thread执行binlog

节点A和B之间互为主备关系,都认为对方是主,切换时不用再修改主备关系。
解决双M binlog循环同步问题
1 A更新的事务,binlog记的是A的server id
2 B同步后生成的binlog的server id也是A的server id
3 A继续同步时,发现server id是自己,不会处理,避免死循环。

把备库设置成只读模式的原因是
1 避免在备库上执行运维操作出现写操作
2 防止切换过程中出现双写而造成主备不一致

只读实例和双M备库区别
只读实例使用异步方式来同步binlog,存在延迟;双M备库使用同步方式,不存在延迟。

binlog有3种格式,分别是statement、row和mixed。其中,mixed是statement和row的混合场景。
statement:binlog记录SQL语句原文,占用空间小。
row:记录操作行的具体信息(包括主键id),不会有主备删除不同行的问题,占用空间大。
mixed:判断SQL语句是否可能引起主备不一致,如果可能,就用row,否则就用statement。

主备延迟
1 主库A执行完成事务,写入binlog,时刻是T1
2 备库B接收完这个binlog,时刻是T2
3 备库B执行完成这个事务,时刻是T3
同一个事务,在备库执行完成的时间和主库执行完成的时间差值。
在备库上执行show slave status,seconds_behind_master表示备库延迟了多少秒。
网络正常时,日志从主库传给备库时间很短,即T2-T1值非常小,主备延迟的主要来源是备库接收完binlog和执行完这个事务之间的时间差。

双M主备切换流程
1 判断备库B当前seconds_behind_master,如果小于某个值(比如5秒)继续下一步,否则持续重试这一步
2 主库A改成只读
3 判断备库B的seconds_behind_master,直到这个值变成0
4 备库B改成可读写
5 业务请求切到备库B

posted on   王景迁  阅读(105)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示