`
lauy
  • 浏览: 436036 次
  • 性别: 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、三台CentOS 7 服务器 2、mysql5.7.26(三台都通过yum安装) 服务器列表 7.100.222.111 master ...6、数据一致性问题(同步延迟造成) 7、一但主机宕机就不可以进行写操作 二、搭建集群

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

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

    MySQL中从库延迟状况排查的一则案例

    今天给一个客户巡检的情况下发从库没有业务的情况mysqld的cpu的一个core占用100%.查主库慢查询也没有关于写的SQL. 可以说是典的单进程复制把一个cpu占满造成的.知道原因了,就好分析了. 分析一下binlog中写的什么...

    部署MySQL延迟从库的好处小结

    MySQL主从复制它可以有多种模式,最经典的也是最早出现的异步复制(async replication),从5.5版本开始有了半同步复制(semi-sync replication),到了5.7又有了增强半同步。本文要讨论的延迟从库,也是在5.6之后才有的...

    MySQL多线程同步MySQL-Transfer介绍

    其主要目的是为了解决原生版本的主从同步里,从库是单线程apply主库的binlog,导致的延迟。最近完成测试的版本将multi-master(byP.Linux)合并到Transfer中并针对支付宝的应用需求做了定制性能改进。这里做一个已经...

    详解MySQL主从不一致情形与解决方法

    通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据同步出现这种几率非常的大,所以做读写分离,注意从业务层进行前期设计。 1.2 主从两台机器的负载不一致 由于mysql主从...

    MySQL主从复制延迟原因以及解决方案

    在异步或半同步的复制结构中,从库出现延迟是一件十分正常的事。 虽出现延迟正常,但是否需要关注,则一般是由业务来评估。 如:从库上有需要较高一致性的读业务,并且要求延迟小于某个值,那么则需要关注。 简单...

    深入探索MySQL主从架构与读写分离:提升数据安全和性能的实战指南

    详细说明了如何配置Master主服务器和Slave从服务,包括同步原理和具体搭建步骤。文章还涵盖了半同步复制的原理与实施,以及如何处理主从架构中的数据延迟问题。此外,还探讨了MySQL高可用方案和分库分表的实用性,...

    MySQL数据库InnoDB引擎主从复制同步经验总结

    近期将公司的MySQL架构升级了,由原先的一主多从换成了DRBD+Heartbeat双主多从,正好手上有一个电子商务网站新项目也要上线了,用的是DRBD+Heartbeat双主一从,由于此过程还是有别于以前的MyISAM引擎的,所以这里也...

    MySQL延迟问题和数据刷盘策略流程分析

    MySQL延迟问题和数据刷盘策略 1、绝对的延时,相对的同步 2、纯写操作,线上标准配置下,从库压力大于主库,最起码从库有relaylog的写入。 二、MySQL延迟问题分析 1、主库DML请求频繁 原因:主库并发写入数据,而从...

    mysql数据库备份设置延时备份方法(mysql主从配置)

    2)从服务器把主服务器的二进制日志事件拷贝到自己的中继日志(relay log)中; 3)从服务器执行中继日志中的事件,把更改应用到自己的数据上。 在生产中,我们在使用 mysql AB 复制技术不但可以起到数据库层面负载...

    MySQLDBA运维笔记.pdf

    属主和用户组为 mysql 或 root......................................................................................21 1.3.4 删除默认存在的 test 库 .........................................................

    运维和网络安全相关

    运维是做什么的,mysql主从同步原理 从库延迟,数据尽量数字化 ,原因请看如下搜索文本例子

    MySQL 主从复制搭建,基于日志(binlog)

     简单来说,是保证主SQL(Master)和从SQL(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟),通过这种方式来保证数据的一致性,是主从复制。  MySQL...

    InnoDB引擎数据库主从复制同步新的分享

    近期将公司的MySQL架构升级了,由原先的一主多从换成了DRBD+Heartbeat双主多从,正好手上有一个电子商务网站新项目也要上线了,用的是DRBD+Heartbeat双主一从,由于此过程还是有别于以前的MyISAM引擎的,所以这里也...

    bireme:Bireme是Greenplum HashData数据仓库的增量同步工具

    它可以同时并行地从多个数据源读取记录,并将记录加载到目标数据库。 1.2数据源 1.2.1麦克斯韦+卡夫卡 Maxwell + Kafka是bireme当前支持的数据源类型。 结构如下: 是一个读取MySQL二进制日志并将

    MySQL事务控制和锁机制

    摘要 本文基于MySQL5.7为基础,讨论与数据库事务和锁的相关内容。...如果你在从库上备份,那么备份期间从库不能执行主库同步过来的binlog,会导致主从延迟。 MySQL官方逻辑备份工具mysqldump,以下参

Global site tag (gtag.js) - Google Analytics