之前部署了Mysql主从复制环境(MySQL主从复制环境部署【http://blog.itpub.net/31015730/viewspace-2153251/】)以及总结了mysql主从复制的原理和相关知识(MySQL主从复制原理及必备知识总结【http://blog.itpub.net/31015730/viewspace-2154408/】),但是在mysql主从同步过程中会出现很多问题,导致数据同步异常,主要有两个比较头疼的问题:
1、主从数据不同步后如何处理?
2、主从同步延迟问题如何解决?
以下内容梳理了几种主从同步中可能存在的问题以及解决思路:
(1)slave运行过慢不能与master同步,也就是MySQL数据库主从同步延迟
MySQL数据库slave服务器延迟的现象是非常普遍的,MySQL复制允许从机进行SELECT操作,但是在实际生产环境下,由于从机延迟的关系,很难将读取操作转向到从机。这就导致了有了以下一些潜规则:“实时性要求不高的读取操作可以放到slave服务器,实时性要求高的读取操作放到master服务器”,“从机仅能做前一天的统计类查询”。
slave滞后即slave不能快速执行来自于master的所有事件,从而不能避免更新slave数据延迟。
mysql的master-slave架构中master仅做写入、更新、删除操作,slave做select操作。造成slave滞后的原因有很多。
slave同步延迟的原理
MySQL的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高。
Slave的IO Thread线程从主库中bin log中读取取日志。
Slave的SQL Thread线程将主库的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是随即的,不是顺序的,成本高很多。
由于SQL Thread也是单线程的,如果slave上的其他查询产生lock争用,又或者一个DML语句(大事务、大查询)执行了几分钟卡住了,那么所有之后的DML会等待这个DML执行完才会继续执行,这就导致了延时。也许有人会质疑:主库上那个相同的DDL也会执行几分钟,为什么slave会延时?原因是master可以并发执行,而Slave_SQL_Running线程却不可以。
slave同步延迟的可能原因
1--slave的I/O线程推迟读取日志中的事件信息;最常见原因是slave是在单线程中执行所有事务,而master有很多线程可以并行执行事务。
2--带来低效连接的长查询、磁盘读取的I/O限制、锁竞争和innodb线程同步启动等。
3--Master负载;Slave负载
4--网络延迟
5--机器配置(cpu、内存、硬盘)
(主从同步延迟怎么产生的?)总之