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。