MySQL主从复制延迟解决方案

第1章 MySQL主从复制延迟解决方案

1.1主从复制原理:

Mysql主从复制是单线程操作的,io线程读取binlog日志,效率会比较高,但是SQL线程将主库的DDLDML操作早slave端实施,DMLDDLio操作是随机的,不是顺序的,成本会比较高,还可能salve端有查询操作导致lock争抢,SQL线程也是单线成的,一个DDL卡住了,需要时间执行,所有DDL就会等待那个DDL,问题就来了,主从复制就会有延迟了。

1.1.1DDLDML是什么?

 SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL

1.1.2为什 么slave会延时?

master是并发的,SQL线程却不可以

1.2导致主从复制延迟的原因:

  1. 当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,那么延时就产生了。
  2. 当然还有就是可能与slave的大型query语句产生了锁等待。
  3. 服务器硬件太差。
  4. 负载过高(masterslave),大量的查询操作。
  5. 网络延迟

1.3如何解决主从复制延迟问题:

1.3.1方案一:读写分离

1.3.2方案二:半同步

1.3.3.方案三:修改配置文件,尽量让主库的DDL快速执行

比如 sync_binlog=1innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binloginnodb_flushlog也 可以设置为0来提高sql的执行效率

1.3.4方案四:提升slave端硬件设备

使用比主库更好的硬件设备作为slave

posted @ 2019-03-04 17:20  呼长喜  阅读(2603)  评论(0编辑  收藏  举报