mysql主从同步延迟的原理分析及解决方案
要说延迟原则,从MySQL数据库主的复制原理来看,MySQL的主从复制是一个单线程操作。
所有binlog DDL和DML binlog主图书馆,是一个连续的写,所以效率很高,从slave_io_running线程日志的主要图书馆,效率很高,下一步,问题是,奴隶slave_sql_running将奴隶implementation.dml DDL和DML和DDL的IO操作的主要线程库是立即的,不是顺序,许多成本高,也可能是奴隶的锁争用其他查询,因为slave_sql_running是单线程的,所以一个DDL卡,需要10分钟,然后在DDL等DDL完成执行下去,这导致的一个朋友会延迟。问:在主图书馆同样也需要执行DDL 10分。为什么奴隶延迟答案是,高手可以并行,但slave_sql_running线程不能。
2。mysql数据库主从同步延迟是如何产生的。
当主库的TPS较高,生成的DDL的数量大于从SQL线程,所以延迟产生。当然,可以使用从属的大型查询语句生成锁等待。
三.mysql数据库主从同步延时解决方案。
Ding Qi的转移是一个很好的解决方案,但通用公司通过修改MySQL的代码和控制MySQL的能力有限。
为了减少从同步延迟是优化结构使主图书馆的DDL尽可能快的最简单的方法。有主库编写,数据安全性高,如sync_binlog = 1,innodb_flush_log_at_trx_commit = 1,设置,和奴隶不需要这么高的数据安全性,可以说sync_binlog设置为0或innodb_flushlog关闭binlog,也可以设置为0来提高SQL效率。另一种是使用优于主图书馆作为一个奴隶的硬件设备。
mysql-5.6.3支持多线程主从复制的原理是类似的,Ding Qi。Ding Qi使用表来生成多个线程。Oracle将模式用作一个单元来执行多个线程,不同的库可以使用不同的复制线程。
sync_binlog = 1
这使得MySQL每次同步二进制日志的内容到磁盘。
默认情况下,binlog不是硬盘每次写同步。如果操作系统或机器(不仅仅是MySQL服务器)的崩溃,这是可能的,在binlog最后陈述丢失。为了避免这种情况,你可以用sync_binlog全局变量(1是最安全的价值,但也最慢的),所以,binlog可以同步与硬盘写入后每N binlog。即使sync_binlog设置为1,也有可能是有表的内容,当碰撞发生binlog内容之间的不一致。如果InnoDB表使用的MySQL服务器处理提交的声明,其中写道,整个交易的binlog提交事务InnoDB。如果发生事故的两个操作并重新启动之间,交易是由InnoDB回滚,但仍然存在于binlog,InnoDB安全binlog选项可以用来增加InnoDB表的内容和binlog之间的一致性。(注:在MySQL 5.1的不安全,InnoDB binlog;由于引入了XA事务的支持,这个选项是无效的),这个选项可以提供更高程度的安全性,使每一笔交易(sync_binlog = 1)和binlog(默认为true)innodb log和步骤的硬盘,这个选项是崩溃后重新启动的影响,在回滚事务,从binlog MySQL服务器剪切InnoDB事务回滚。这保证了binlog F成功后的InnoDB表的确切数据,使服务器从服务器保持同步(不接收ROLLBACK语句)。
innodb_flush_log_at_trx_commit(这是很有用的)
抱怨会比MyISAM慢100倍吗所以你可能忘记调整值。1意味着每个事务提交或交易指令需要写日志的默认值(冲洗)硬盘,这是time-consuming.in特别,当电池备份缓存使用。设置2的大量使用,特别是从MyISAM表,是好吧。这意味着不写入硬盘,写入系统缓存,日志仍然会冲到每秒硬盘,所以你通常不会失去超过1-2秒更新。0会更快一点,但安全性差,即使MySQL挂,这可能失去交易数据。数据的值是2,只有当整个操作系统挂。