`
lauy
  • 浏览: 438211 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MYSQL主从不同步延迟原理

阅读更多

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

丁奇的transefer是一个不错的方案,不过一般公司受限于对mysql的代码修改能力的限制和对mysql的掌控能力,还是不太适合。

最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行。还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave。

mysql-5.6.3已经支持了多线程的主从复制。原理和丁奇的类似,丁奇的是以表做多线程,oracle使用的是以数据库(schema)为单位做多线程,不同的库可以使用不同的复制线程。

 

 

 

sync_binlog=1 o

     This makes MySQL synchronize the binary log’s contents to disk each time it commits a transaction 

     默认情况下,并不是每次写入时都将binlog与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能binlog中最后的语句丢 失了。要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使binlog在每N次binlog写入后与硬盘 同步。即使sync_binlog设置为1,出现崩溃时,也有可能表内容和binlog内容之间存在不一致性。如果使用InnoDB表,MySQL服务器 处理COMMIT语句,它将整个事务写入binlog并将事务提交到InnoDB中。如果在两次操作之间出现崩溃,重启时,事务被InnoDB回滚,但仍 然存在binlog中。可以用--innodb-safe-binlog选项来增加InnoDB表内容和binlog之间的一致性。(注释:在MySQL 5.1中不需要--innodb-safe-binlog;由于引入了XA事务支持,该选项作废了),该选项可以提供更大程度的安全,使每个事务的 binlog(sync_binlog =1)和(默认情况为真)InnoDB日志与硬盘同步,该选项的效果是崩溃后重启时,在滚回事务后,MySQL服务器从binlog剪切回滚的 InnoDB事务。这样可以确保binlog反馈InnoDB表的确切数据等,并使从服务器保持与主服务器保持同步(不接收 回滚的语句)。

 

 

 

innodb_flush_log_at_trx_commit (这个很管用)

抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了调整这个值。默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电 池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统 挂了时才可能丢数据。

分享到:
评论

相关推荐

    MYSQL主从不同步延迟原理分析及解决方案

    MySQL主从不同步延迟是指在MySQL数据库的主从复制环境中,主库与从库之间的数据更新存在时间差,导致两者的数据状态不一致。这种延迟现象主要由以下几个原因造成: 1. **单线程复制机制**:MySQL的主从复制是通过单...

    mysql主主同步配置

    ### MySQL 主主同步配置详解 #### 一、概念与原理 在MySQL的主主同步配置中,两个服务器之间实现双向的数据复制,确保数据的一致性和高可用性。这种配置方式适用于对数据同步要求较高且希望避免单点故障的场景。 ...

    mysql集群多主同步教程.zip

    总结来说,MySQL集群多主同步是一种高级的数据库管理技术,它可以提高服务的可用性和性能,但同时也需要对数据冲突、网络延迟和故障恢复等复杂问题有深入的理解和有效的解决方案。在云环境中部署时,更需关注安全性...

    Mysql主从半同步配置

    如果从服务器出现延迟或故障,可能会影响到主服务器的响应时间。因此,在生产环境中部署时需要权衡性能和数据一致性之间的关系。 最后,由于文件信息中提到了“美河学习在线”这个来源,表明这些内容可能是从某个...

    java实现两个mysql同步主库的数据

    首先,我们需要理解MySQL的复制原理。MySQL的主从复制是基于日志的,主库上的所有更改都会被记录到二进制日志(binlog)中,然后从库通过读取并应用这些日志来更新其数据。这个过程可以是异步的,也可以是半同步的,...

    如何实现MySQL的主从复制和半同步复制

    MySQL半同步复制(Semi-Synchronous Replication)是一种增强主从复制一致性的方法,它确保在主服务器上的事务提交之前,至少有一个从服务器接收到并应用了该事务的日志。 1. **半同步插件**:MySQL提供了一个名为`...

    Nginx实现MYSQL主备高可用

    MySQL主备复制是指在一个MySQL集群中,主服务器负责处理所有写操作,而从服务器则同步主服务器的数据变更,实现数据备份和读取负载分担。这种模式可以提供高可用性,因为即使主服务器出现故障,从服务器也能无缝接管...

    mysql 半同步复制模式

    MySQL的半同步复制模式(Semi-Synchronous Replication)是一种增强型的复制策略,旨在解决传统异步复制中数据丢失的问题。在半同步复制中,主库确保至少有一个从库接收到并写入了事务日志(二进制日志,binlog)后...

    MySQL数据库的同步

    3. **延迟控制**:控制主从数据库之间的数据同步延迟,以维持服务的响应时间。 4. **冲突解决**:处理可能存在的数据冲突,例如两个数据库同时修改同一数据。 5. **安全机制**:实施访问控制和加密,保护数据安全。 ...

    解决MySQL同步延迟.pdf

    综上所述,解决MySQL同步延迟的问题需要全面考虑网络、硬件性能、数据库配置和SQL执行效率等多个方面。通过系统性的排查和优化,可以有效地减少或消除主从延迟,保证数据库集群的稳定性和数据的一致性。

    MySql数据库同步复制

    在从节点上,`master-host`、`master-user`、`master-password`、`master-port`等配置用于指定连接主节点的参数,`replicate-do-db`则指定了从节点只同步特定数据库的更新。 2. 双机互备: 在双机互备模式下,两台...

    Mysql主从同步(复制) - kylinlin - 博客园1

    MySQL主从同步是一种数据库复制技术,它允许数据从一个服务器(主服务器)自动复制到一个或多个其他服务器(从服务器)。这种同步机制提高了系统的可扩展性、数据安全性以及提供了灾难恢复的可能性。 ### 主从同步...

    Mysql主从复制&半同步复制原理.pdf

    在主从复制架构中,数据在主服务器上进行修改,然后这些更改被同步到一个或多个从服务器。这种复制是异步的,意味着主服务器并不等待从服务器确认已接收和处理数据变更,而是立即向客户端返回成功响应。 **主从复制...

    mysql主从同步解决方案及优化

    淘宝资深工程师丁奇在2009年的分享中详细介绍了MySQL主从同步的原理、配置、优化以及在实际应用中遇到的问题和解决方案。 首先,MySQL主从同步的基本概念指的是在一个数据库实例(主库)上对数据进行修改操作后,...

    Mysql多机同步技术研究总结

    Mysql的多机同步主要基于主从复制(Master-Slave Replication)模式,这是一种异步或半同步的数据复制方式,通过在主服务器上执行的事务日志(Binlog)传输到从服务器,从而实现数据的一致性。具体而言,当主服务器...

    mysql5.7双向实时同步

    在企业级应用中,这种同步策略常用于构建主主复制架构,以确保即使在一台服务器故障时,另一台服务器也能接管工作,避免数据丢失。 在配置MySQL 5.7的双向同步之前,需要注意以下关键点: 1. **版本匹配**:确保...

    Mysql5.5数据库双向同步

    - **主从复制**:在MySQL中,主从复制是一种将数据从一个MySQL服务器(主服务器)复制到一个或多个其他MySQL服务器(从服务器)的过程。 - **双向同步**:当两个MySQL服务器互相作为对方的主服务器时,形成的数据...

Global site tag (gtag.js) - Google Analytics