MySQL 切换有哪些策略
主备延迟
怎么在备库查看主备延迟
在备库执行show slave status
, 结果的seconds_behind_master 就是当前备库延迟了多少秒。
主备延迟的原因
- 从库的机器配置比较差
- 备库执行了统计类型的SQL,导致压力大
- 主库正在执行大事务。如果一个主库上的语句执行 10 分钟,那这个事务很可能就会导致从库延迟 10 分钟。
- 大表DDL
主备切换策略
由于主备延迟的存在,所以在主备切换的时候,就相应的有不同的策略。
可靠性优先策略
可靠性优先策略,可以最大程度的保证数据一致性。关键点是当seconds_behind_master小于某个阈值时,将主库设置为 readonly, 当备库的赶上主库的进度,即seconds_bind_master=0时,将备库改为可读写状态,将业务请求切到备库B。
可用性优先策略
指的是,直接将备库设置为可读写然后把业务流量切到备库。但是在这个过程中,可能出现数据不一致的情况。
比如biinlog 格式为statement,主库写入 c=4, id=4, 然后就进行了主备切换,新主库还没执行c=4, id=4, 就插入c=5的记录,此时结果为c=5 id=4, 然后执行c=4, id=5 的记录。这主要是statement格式没记录主键,插入的记录自己生成了主键。
如果出现循环复制怎么办
出现循环复制,一种情况是 A 与 B 是双M结构,然后进行迁移,A与A1 组成双M的过程中,来自B的binlog 在A与A1形成了循环复制,因为binlog的server_id 为 B的,A,A1判断不是自己产生的binlog就会执行,然后传给对方
在 任意库执行
stop slave;
CHANGE MASTER TO IGNORE_SERVER_IDS=(server_id_of_B);
start slave;
将产生循环赋值的server_id忽略掉
stop slave;
CHANGE MASTER TO IGNORE_SERVER_IDS=();
start slave;
然后再改回来
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署