MySQL数据库主从同步延迟原理。mysql
MySQL数据库主从同步延迟是怎么产生的。sql
MySQL数据库主从同步延迟解决方案。数据库
MySQL数据库主从同步延迟产生的因素。安全
答:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理提及,mysql的主从复制都是单线程的操做,主库对全部DDL和DML产生binlog,binlog是顺序写,因此效率很高;slave的Slave_IO_Running线程会到主库取日志,效率会比较高,slave的Slave_SQL_Running线程将主库的DDL和DML操做都在slave实施。DML和DDL的IO操做是随机的,不是顺序的,所以成本会很高,还多是slave上的其余查询产生lock争用,因为Slave_SQL_Running也是单线程的,因此一个DDL卡主了,须要执行10分钟,那么全部以后的DDL会等待这个DDL执行完才会继续执行,这就致使了延时。有朋友会问:“主库上那个相同的DDL也须要执行10分,为何slave会延时?”,答案是master能够并发,Slave_SQL_Running线程却不能够。网络
2.MySQL数据库主从同步延迟是怎么产生的。架构
答:当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,那么延时就产生了,固然还有就是可能与slave的大型query语句产生了锁等待。并发
3.MySQL数据库主从同步延迟解决方案ide
答:最简单的减小slave同步延时的方案就是在架构上作优化,尽可能让主库的DDL快速执行。还有就是主库是写,对数据安全性较高,好比sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不须要这么高的数据安全,彻底能够讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也能够设置为0来提升sql的执行效率。另外就是使用比主库更好的硬件设备做为slave。优化
4.MySQL数据库主从同步延迟产生的因素。
1. 网络延迟
2. master负载
3. slave负载
通常的作法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器,只做为备份用,不进行其余任何操做,就能相对最大限度地达到’实时’的要求了
另外,再介绍2个能够减小延迟的参数 –slave-net-timeout=seconds 参数含义:当slave从主数据库读取log数据失败后,等待多久从新创建链接并获取数据 slave_net_timeout单位为秒 默认设置为 3600秒 | slave_net_timeout | 3600 –master-connect-retry=seconds 参数含义:当从新创建主从链接时,若是链接创建失败,间隔多久后重试。 master-connect-retry单位为秒 默认设置为 60秒 一般配置以上2个参数能够减小网络问题致使的主从数据同步延迟