`

如何解决主从数据库同步延迟问题?

阅读更多
如何解决主库插入记录后,无法从从库中及时读取的问题,如何从架构上避免这种问题
在网上见过新建一个版本库的表,然后利用mysql proxy判断数据是否是最新的,然后路由到主库或者是从库,请问这个方案是可行的吗?具体如何操作?

作者:姜健
链接:https://www.zhihu.com/question/20025096/answer/82440882
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题主说的方案感觉非常不靠谱。
不过mysql-proxy本人也几乎没怎么接触,它能否实现上诉功能有些不大确定,即使它有,也不建议为了这个就用它,官网自己都不推荐用到生产环境。

针对主从延迟,本人的经验如下:
业务量不大的
主库能处理业务就全放在主库吧,从库只做灾备,备份,对实时性要求不高的统计报表类工作;
已经出现延迟的
一般来说,就慢慢等吧,试图通过重启db之类的操作是无法解决的,还会因为大事务回滚再重做导致花的时间更长。
延迟N天无法解决的
那就重做slave。
为什么会延迟N天,难道仅仅是因为从库单线程吗?
我感觉大部分都是主库上采用mixed的binlog_format,由于某种限制,无法基于statement,只好row模式复制。
那么如果当前sql是全表扫描,传到slave上执行时就是茫茫多次的全表扫描了。
一般来说在slave上show proceslist看查看当前的system user正在执行什么,那就是问题SQL。如果pos点一直不动,也可以去主库对应的binlog上查看下执行的是什么玩意。
出现延迟时,查看下当前slave的cpu和磁盘状况
一般来说如果从库没有其他业务,单线程的原因,cpu跑满一个核已经是极限了。磁盘io满的话,确认下是否有其他进程或mysql线程影响了它(比如从库正在dump或者超大的sql在执行),也可以尝试调整下slave上关于io的几个参数
从库raid卡,务必设置成write back的写策略
这点本人深受其害,查了几个月才发现为什么我的SSD io性能这么烂。
批量的dml操作
批量的dml操作如果不做处理,一般必然会出现延迟,建议业务低峰期执行,并将批量操作做下调整,一次dml 10000行,sleep一会,再dml 10000行。
具体的行数和sleep需要自己根据业务确定,能保证从库不延迟就好。

一点别的tips:
如果还是经常性的短时间延迟,那就尝试加大从库的硬件配置,比如上sata SSD,pcie等
延迟的监控到位,可通过pt-heart-beat来准确监控延迟值,及时发现查看。
5.5以后版本的,可以考虑采用半同步复制,能解决少量延迟引起的问题,不过对tps性能损耗较大
升级到mysql 5.7吧,多线程复制,几乎完美解决单线程复制引起的从库延迟。


作者:姜健
链接:https://www.zhihu.com/question/20025096/answer/82440882
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题主说的方案感觉非常不靠谱。
不过mysql-proxy本人也几乎没怎么接触,它能否实现上诉功能有些不大确定,即使它有,也不建议为了这个就用它,官网自己都不推荐用到生产环境。

针对主从延迟,本人的经验如下:
业务量不大的
主库能处理业务就全放在主库吧,从库只做灾备,备份,对实时性要求不高的统计报表类工作;
已经出现延迟的
一般来说,就慢慢等吧,试图通过重启db之类的操作是无法解决的,还会因为大事务回滚再重做导致花的时间更长。
延迟N天无法解决的
那就重做slave。
为什么会延迟N天,难道仅仅是因为从库单线程吗?
我感觉大部分都是主库上采用mixed的binlog_format,由于某种限制,无法基于statement,只好row模式复制。
那么如果当前sql是全表扫描,传到slave上执行时就是茫茫多次的全表扫描了。
一般来说在slave上show proceslist看查看当前的system user正在执行什么,那就是问题SQL。如果pos点一直不动,也可以去主库对应的binlog上查看下执行的是什么玩意。
出现延迟时,查看下当前slave的cpu和磁盘状况
一般来说如果从库没有其他业务,单线程的原因,cpu跑满一个核已经是极限了。磁盘io满的话,确认下是否有其他进程或mysql线程影响了它(比如从库正在dump或者超大的sql在执行),也可以尝试调整下slave上关于io的几个参数
从库raid卡,务必设置成write back的写策略
这点本人深受其害,查了几个月才发现为什么我的SSD io性能这么烂。
批量的dml操作
批量的dml操作如果不做处理,一般必然会出现延迟,建议业务低峰期执行,并将批量操作做下调整,一次dml 10000行,sleep一会,再dml 10000行。
具体的行数和sleep需要自己根据业务确定,能保证从库不延迟就好。

一点别的tips:
如果还是经常性的短时间延迟,那就尝试加大从库的硬件配置,比如上sata SSD,pcie等
延迟的监控到位,可通过pt-heart-beat来准确监控延迟值,及时发现查看。
5.5以后版本的,可以考虑采用半同步复制,能解决少量延迟引起的问题,不过对tps性能损耗较大
升级到mysql 5.7吧,多线程复制,几乎完美解决单线程复制引起的从库延迟。
分享到:
评论

相关推荐

    51_说说MySQL读写分离的原理?主从同步延时咋解决?.zip

    https://mp.csdn.net/console/uploadResources?spm=1011.2124.3001.4171

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

    由于历史原因,MySQL复制基于逻辑的二进制日志,而非重做日志。多次被问到何时MySQL能... 复制架构下,主从数据延迟小; 假设执行了1个小时的某大事务,在最后提交时,只需写入最后提交部分的重做日志(redo log可视为

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

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

    MySQL数据库实现双活操作流程-实操版本.docx

    MySQL数据库实现双活是指在多个数据中心中安装有相同的MySQL服务,实现两个数据中心之间的数据库同步,达到数据双向同步的效果,保证数据的高可用性和容灾性。避免主从同步的延迟在双主复制的基础上,需要进行一些...

    InnoDB引擎数据库主从复制同步心得

    1)MySQL的replication过程是一个异步同步的过程,并非完全的主从同步,所以同步的过程中是有延迟的,如果做了读写分离的业务的话,建议也要监控此延迟时间;  2)MySQL的master与slave机器记得server-id要保持不...

    聊聊高并发高可用那些事(Kafka、Redis、MySQL)

    - 主从同步有延迟怎么办? - .frm .myi .myd .ibd 文件 - 为什么表数据删掉一半,表文件大小不变? - 误删表数据除了跑路,还能干啥? - MySQL长连接导致内存溢出? - MySQL自带的数据库 - 代码示例 - MySQL 相关阅读 # ...

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

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

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

    1)MySQL的replication过程是一个异步同步的过程,并非完全的主从同步,所以同步的过程中是有延迟的,如果做了读写分离的业务的话,建议也要监控此延迟时间; 2)MySQL的master与slave机器记得server-id要保持不一致...

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

    1)MySQL的replication过程是一个异步同步的过程,并非完全的主从同步,所以同步的过程中是有延迟的,如果做了读写分离的业务的话,建议也要监控此延迟时间; 2)MySQL的master与slave机器记得server-id要保持不...

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

    1. MySQL数据库主从同步延迟原理。要说延时原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running...

    43道MySQL面试题集合(附答案)

    1. 请说下你对 MySQL 架构的了解? 2. 一条 SQL 语句在数据库框架中的执行流程?...21. 主从同步的延迟原因及解决办法? 22. 谈谈你对数据库读写分离的理解? 23. 请你描述下事务的特性? 24. 谈谈你对

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

    主要介绍了mysql数据库延时备份的方法,也就是mysql主从服务器备份,可以同步到多个服务器,最后我们提供了一个备份脚本,大家参考使用吧

    java开发面试必问_自我总结.docx

    数据库篇 :数据库的主从同步读写分离;主从同库延迟问题;Sql优化;索引、存储过程、函数语法及各自的优缺点。等 电商系列问题:产品详情页;静态化介绍;支付;商品管理模块;报表统计;统计分析模块。等 非专业...

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

    文章还涵盖了半同步复制的原理与实施,以及如何处理主从架构中的数据延迟问题。此外,还探讨了MySQL高可用方案和分库分表的实用性,说明了这些技术在处理大数据量时如何提升数据库性能和可扩展性。总之,本文为...

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

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

    thinkphp下MySQL数据库读写分离代码剖析

    MySQL数据主从同步还是要靠MySQL的机制来实现,所以这个时候MySQL主从同步的延迟问题是需要优化,延迟时间太长不仅影响业务,还影响用户体验。 thinkphp核心类Thinkphp/library/Model.class.php 中,query 方法,...

    c#编写的高并发数据库控制访问代码

    往往大数据量,高并发时, 瓶颈都在数据库上, 好多人都说用数据库的复制,发布, 读写分离等技术, 但主从数据库之间同步时间有延迟.

    中国首届微博开发者大会-新浪微博架构分析(杨卫华)

    mysql主从数据库部署 memcache扩展改用libmemcached; 引入消息机制(MemcaheQ),异步发表微博; 微博推送用户分级,优先推送重点用户; InnoDB搜索引擎 按时间分表,索引以mysql存放,内容采用nosql存储 问题...

    Java常见面试题208道.docx

    160.zookeeper 怎么保证主从节点的状态同步? 161.集群中为什么要有主节点? 162.集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗? 163.说一下 zookeeper 的通知机制? 十七、MySql 164....

    word源码java-hadoop-cloud-register:个人springboot项目-方便工作cv

    集成mybatis,druid数据库连接池(是否可以动态修改连接数),多数据源(读写分离,主从数据库同步的延迟), 分页:https://github.com/pagehelper/Mybatis-PageHelper(完成) 集成jpa(完成,集成了mybatis工具包后基本...

Global site tag (gtag.js) - Google Analytics