MySQL主从复制延迟解决方案
第1章 MySQL主从复制延迟解决方案
1.1主从复制原理:
Mysql主从复制是单线程操作的,io线程读取binlog日志,效率会比较高,但是SQL线程将主库的DDL和DML操作早slave端实施,DML和DDL的io操作是随机的,不是顺序的,成本会比较高,还可能salve端有查询操作导致lock争抢,SQL线程也是单线成的,一个DDL卡住了,需要时间执行,所有DDL就会等待那个DDL,问题就来了,主从复制就会有延迟了。
1.1.1DDL和DML是什么?
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。
1.1.2为什 么slave会延时?
master是并发的,SQL线程却不可以
1.2导致主从复制延迟的原因:
- 当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,那么延时就产生了。
- 当然还有就是可能与slave的大型query语句产生了锁等待。
- 服务器硬件太差。
- 负载过高(master,slave),大量的查询操作。
- 网络延迟
1.3如何解决主从复制延迟问题:
1.3.1方案一:读写分离
1.3.2方案二:半同步
1.3.3.方案三:修改配置文件,尽量让主库的DDL快速执行
比如 sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也 可以设置为0来提高sql的执行效率
1.3.4方案四:提升slave端硬件设备
使用比主库更好的硬件设备作为slave。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?