MySQL-主从同步延迟

1. MySQL数据库主从同步延迟原理?

创新互联-专业网站定制、快速模板网站建设、高性价比铁门关网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式铁门关网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖铁门关地区。费用合理售后完善,10余年实体公司更值得信赖。

2. MySQL数据库主从同步延迟是怎么产生的?

3. MySQL数据库主从同步延迟解决方案?

---------------------------------------------------------------------------------------------------

1. 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数据库主从同步延迟解决方案。

问题一:主库的从库太多,导致复制延迟

从库数据以3-5个为宜,要复制的从节点数量过多,会导致复制延迟

问题二:从库硬件比主库差,导致复制延迟

查看Master和Slave的系统配置,可能会因为机器配置不当,包括磁盘I/O、CPU、内存等各方面因素造成复制的延迟。一般发生在高并发大数据量写入场景中

问题三:慢SQL语句过多

假如一条SQL语句执行时间是20秒,那么从执行完毕到从库上能查到数据至少需要20秒,这样就延迟20秒了。

一般要把SQL语句的优化作为常规工作不断地进行监控和优化,如果单个SQL的写入时间长,可以修改后分多次写入。通过查看慢查询日志或show full processlist命令,找出执行时间长的查询语句或大的事务

问题四:主从复制的设计问题

例如主从复制单线程,如果主库写并发太大,来不及传送到从库,就会导致延迟。更高版本的Mysql可以支持多线程复制,门户网站则会开发自己的多线程同步功能。

问题五:主从库之间的网络延迟

主从库的网卡、网线、交换机等网络设备都可能成为复制的瓶颈,导致复制延迟。另外,跨公网的主从复制很容易导致主从复制延迟

问题六:主库读写压力大,导致复制延迟

架构的前端要加buffer及缓存层

门户网站的解决方案:

优酷的解决方案:数据库分片技术,而抛弃了由于数据量的越来越多导致复制延迟的问题。按照user_id进行分片,这样必须有一个全局的表来管理用户与shard的关系,根据user_id可以得到share_id,然后根据share_id去指定的分片查询指定的数据


淘宝的解决方案:修改源码,对应的机制是Transfer机制,此处通过对Binlog日志重做采用多线程实现,从而提高slave的QPS



当前文章:MySQL-主从同步延迟
当前路径:http://myzitong.com/article/pcoogs.html