`
bugyun
  • 浏览: 559204 次
社区版块
存档分类
最新评论

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

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

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

sync_binlog=1

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只会在整个操作系统 挂了时才可能丢数据。

 

参考:http://www.linuxidc.com/Linux/2014-05/101450.htm

 

分享到:
评论

相关推荐

    mysql主从复制延迟问题

    MySQL 主从复制模式全面实践

    MySQL主从复制模式是数据库领域内一种重要的数据同步机制,它能够让一台主数据库服务器(master)的数据实时复制到一个或多个从数据库服务器(slave)上。这种机制在数据库的高可用性、数据备份、读写分离以及负载...

    SpringBoot第 12 讲:SpringBoot+MySQL主从复制、读写分离

    - **监控与管理**:定期检查复制延迟,确保数据的一致性,并对复制进程进行监控,以便及时发现并解决问题。 - **安全性**:确保主从复制过程中的数据传输安全,避免敏感信息泄露。 总的来说,SpringBoot与MySQL的...

    MySQL主从复制模式全面实践

    MySQL主从复制是一种数据库高可用性和数据冗余的重要机制,它允许数据从一个服务器(主节点)同步到一个或多个其他服务器(从节点)。在本实践中,我们将深入探讨这一模式的各个方面,包括其工作原理、配置步骤、...

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

    1. Lepus监控工具:这是一个数据库监控系统,专门用来监控MySQL主从复制延迟和慢查询问题。 2. MySQL主从复制延迟:这指的是MySQL数据库在主从架构模式下,从服务器与主服务器之间的数据复制可能存在时间差,而Lepus...

    深入mysql主从复制延迟问题的详解

    解决主从复制延迟问题的方法包括优化网络环境、提升从服务器硬件性能、调整MySQL复制配置(如使用STATEMENT或ROW格式的binlog,优化binlog缓存大小等)、使用多线程复制(如GTID模式下的Parallel Replication)以及...

    MySQL主从复制与读写分离

    MySQL主从复制与读写分离是数据库架构中的重要策略,旨在提高系统的可用性、扩展性和数据安全性。在大型系统中,随着数据量的增长和访问压力的增加,单一数据库服务器往往无法满足性能需求。主从复制和读写分离是...

    MySQL主从复制部署实施文档

    ### MySQL主从复制部署实施知识点 #### 一、MySQL主从复制概述 MySQL主从复制是一种数据复制技术,它能够实现在多个服务器之间复制数据。通常包括一个主服务器(Master)和一个或多个从服务器(Slave)。在主从复制...

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

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

    MySQL主从复制、搭建、状态检查、中断排查及备库重做 实战手册.pdf

    异常处理包括IO_thread异常和sql_thread异常的排查,以及主从复制延迟的问题解决。 - 主从复制状态检查:可以通过SHOW SLAVE STATUS\G命令查看复制的状态信息,检查是否存在错误以及复制是否正常运行。 - IO_thread...

    MySQL主从复制架构原理与配置实践

    ### MySQL主从复制架构原理与配置实践 #### 一、MySQL主从复制概述 MySQL主从复制是一种常用的技术手段,用于提高数据库系统的可用性、扩展性和数据安全性。它通过将一个MySQL实例(主服务器)的数据实时复制到一...

    MySQL主从复制配置文档

    MySQL主从复制是一种数据库高可用性和数据冗余的解决方案,它允许数据从一个服务器(主节点)实时同步到另一个或多个服务器(从节点)。这种架构能够实现读写分离,提高系统的读取性能,并且在主节点出现故障时,...

    MySQL主从复制项目实例

    MySQL主从复制是一种数据库高可用性和数据冗余的解决方案,尤其在分布式系统和大型数据库环境中极为常见。这个项目实例将带你深入理解这一机制,并通过实际操作来熟悉整个配置过程。 首先,MySQL主从复制的核心原理...

    linux运维学习笔记:MySQL主从复制原理和实战.pdf

    在开始讨论MySQL主从复制的原理和实战之前,我们需要了解其重要性。主从复制的主要作用是保证数据安全性和服务的持续运行。当主数据库发生故障时,从数据库可以接管业务,保证服务的连续性。同时,通过将数据复制到...

    mysql主从数据搭建问题处理

    在搭建MySQL主从复制的过程中,可能会遇到以下问题: 1. **配置文件设置**:首先,我们需要在主服务器和从服务器的my.cnf配置文件中添加相应的复制配置。例如,为主服务器设置`server-id`,并在`binlog-format`中...

    超简单mysql主从复制

    ### 超简单MySQL主从复制 #### 一、引言 在数据库管理领域,MySQL因其易用性、稳定性和强大的功能集而受到广泛欢迎。其中,“MySQL主从复制”是一项重要的技术,它通过将一个MySQL服务器(主服务器)的数据复制到一...

    MySQL主从复制原理 _ 异步复制 _ 半同步复制 _ GTID复制.pdf

    MySQL主从复制是一种重要的数据库高可用性和数据冗余策略,它允许数据从一个主服务器(Master)实时或近实时地复制到一个或多个从服务器(Slave)。这种技术在分布式系统、高并发应用以及数据安全等领域有着广泛的...

Global site tag (gtag.js) - Google Analytics