`
Tzhennan
  • 浏览: 58256 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MySQL 主从同步延迟

 
阅读更多

在配置好主从同步以后, 主服务器会把更新语句写入binlog, 从服务器的IO线程(5.6.3 之前的IO线程仅有一个,5.6.3之后的有多线程去读了,速度自然也就加快了)回去读取主服务器的binlog 并且写到从服务器的Relay log 里面,然后从服务器的SQL thread会一个一个执行 relay log 里面的sql , 进行数据恢复。

 

 

1. 主从同步的延迟的原因

当某个SQL在从服务器上执行的时间稍长或者由于某个SQL要进行锁表就会导致主服务器的SQL大量积压,未被同步到从服务器里。这就导致了主从不一致, 也就是主从延迟。

 

2. 主从同步延迟的解决办法

a. 主服务器要负责更新操作, 他对安全性的要求比从服务器高, 所有有些设置可以修改,比如sync_binlog = 1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以将sync_binlog设置为0或者关闭binlog,innodb_flushlog, innodb_flush_log_at_trx_commit 也可以设置为0来提高sql的执行效率,这个能很大程度上提高效率。

b. 使用比主库更好的硬件设备作为slave。

c. 增加从服务器,分散从服务器读压力, 从而降低服务器负载。

 

参数解释:

1、innodb_flush_log_at_trx_commit

取值:0/1/2

innodb_flush_log_at_trx_commit=0,表示每隔一秒把log buffer刷到文件系统中(os buffer)去,并且调用文件系统的“flush”操作将缓存刷新到磁盘上去。也就是说一秒之前的日志都保存在日志缓冲区,也就是内存上,如果机器宕掉,可能丢失1秒的事务数据。

innodb_flush_log_at_trx_commit=1,表示在每次事务提交的时候,都把log buffer刷到文件系统中(os buffer)去,并且调用文件系统的“flush”操作将缓存刷新到磁盘上去。这样的话,数据库对IO的要求就非常高了,如果底层的硬件提供的IOPS比较差,那么MySQL数据库的并发很快就会由于硬件IO的问题而无法提升。

innodb_flush_log_at_trx_commit=2,表示在每次事务提交的时候会把log buffer刷到文件系统中去,但并不会立即刷写到磁盘。如果只是MySQL数据库挂掉了,由于文件系统没有问题,那么对应的事务数据并没有丢失。只有在数据库所在的主机操作系统损坏或者突然掉电的情况下,数据库的事务数据可能丢失1秒之类的事务数据。这样的好处,减少了事务数据丢失的概率,而对底层硬件的IO要求也没有那么高(log buffer写到文件系统中,一般只是从log buffer的内存转移的文件系统的内存缓存中,对底层IO没有压力)。

 

2、sync_binlog

sync_binlog:是MySQL 的二进制日志(binary log)同步到磁盘的频率。

取值:0-N

sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。这个是性能最好的。

sync_binlog=1,当每进行1次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

 

大多数情况下,对数据的一致性并没有很严格的要求,所以并不会把 sync_binlog 配置成 1. 为了追求高并发,提升性能,可以设置为 100 或直接用 0.

而和 innodb_flush_log_at_trx_commit 一样,对于支付服务这样的应用,还是比较推荐 sync_binlog = 1

 

 

3.判断主从延迟的方法

MySQL提供了从服务器状态命令,可以通过 show slave status 进行查看, 比如可以看看Seconds_Behind_Master参数的值来判断,是否有发生主从延时。

其值有这么几种:

NULL - 表示io_thread或是sql_thread有任何一个发生故障,也就是该线程的Running状态是No,而非Yes.

0 - 该值为零,是我们极为渴望看到的情况,表示主从复制状态正常

分享到:
评论

相关推荐

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

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

    MySQL主从同步延迟的原因及解决办法

    MySQL主从同步是一种常见的数据库高可用性和读写分离策略,但在实践中可能会遇到主从延迟的问题。主从延迟主要由以下几个原因造成: 1. **单线程处理**:在早期版本的MySQL中,从服务器只有一个IO线程用于读取主...

    mysql主从同步搭建修改优化版.pdf

    MySQL主从同步是一种常见的数据库高可用性和数据冗余策略,它允许数据在多个服务器之间实时复制,确保即使在一台服务器故障时,数据仍然可以被访问。以下是对搭建、修改和优化MySQL主从同步过程的详细解释: 1. **...

    mysql主从同步配置

    MySQL主从同步是一种数据库复制技术,它允许数据从一个MySQL服务器(称为“主服务器”)实时复制到另一个或多个服务器(称为“从服务器”)。这种配置对于数据备份、负载均衡和高可用性至关重要。在Java开发中,了解...

    win系统下的mysql主从同步配置

    MySQL主从同步是数据库架构中常见的一种高可用性解决方案。它可以实现数据的实时备份,分担主库读写操作压力,并提供数据的热备份。在Windows操作系统下配置MySQL主从同步涉及多个步骤,以下将详细解读配置的原理、...

    Mysql主从半同步配置

    MySQL主从半同步复制是介于异步复制和全同步复制之间的一种模式,它提供了更好的数据安全性和一致性,同时也尽可能地减少了性能损失。 首先,我们来了解一下什么是MySQL半同步复制。在半同步复制模式下,主服务器在...

    mysql主从复制延迟问题

    mysql主从同步配置.docx

    在实际环境中,主从同步还需要考虑网络延迟、数据一致性、错误处理以及性能优化等问题。此外,为了提高系统的健壮性,可以采用多从结构,即一个主库可以有多个从库,进一步分散读取负载和提高容错能力。同时,定期...

    mysql主从同步,读写分离主要代码

    MySQL主从同步是一种数据复制机制,它允许一个或多个从服务器(slaves)从主服务器(master)获取并应用数据更改。这种机制确保了数据在多个服务器间的实时一致性,同时也提供了数据备份和容灾恢复的能力。 **主从...

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

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

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

    MySQL主从复制是指在一个MySQL集群中,数据在主服务器上写入后,会被自动复制到一个或多个从服务器上。这种复制模式分为三个主要阶段:日志记录、网络传输和应用更改。 1. **日志记录**:在主服务器上,所有事务在...

    MYSQL主从同步实战

    ### MySQL 主从同步实战 #### 一、MySQL主从复制简介 MySQL的主从复制机制是一种数据冗余和高...通过以上步骤,我们不仅实现了ServA和ServB之间的MySQL主从同步,还确保了系统在面对故障时具备更高的可靠性和可用性。

    lepus(天兔)监控MySQL主从复制延迟,慢查询

    2. MySQL主从复制延迟:这指的是MySQL数据库在主从架构模式下,从服务器与主服务器之间的数据复制可能存在时间差,而Lepus能够监控到这种延迟情况。 3. 慢查询:慢查询指的是数据库查询操作耗时过长,对于性能影响较...

    mysql主从同步

    ### MySQL主从同步详解 #### 一、MySQL主从同步概念与原理 MySQL 主从同步是一种数据复制技术,主要用于数据库的高可用性、负载均衡以及数据备份等方面。它通过一个或多个从服务器(slave)复制主服务器(master)...

    MySQL主从安装部署

    ### MySQL主从安装部署知识点详解 #### 一、MySQL主从安装部署概述 MySQL 主从复制是一种常见的数据备份和负载均衡技术,在多个服务器之间同步数据。通过设置一个或多个从服务器来复制主服务器上的数据变更操作,...

    MySQL主从同步机制与同步延时问题追查过程

    作为一名DBA,在工作中会经常遇到一些MySQL主从同步延迟的问题,这些同步慢的问题,其实原因非常多,可能是因为主从的网络问题导致,可能是因为网络带宽问题导致,可能是因为大事务导致,也可能是因为单线程复制导致...

Global site tag (gtag.js) - Google Analytics