一种MySQL主从同步加速方案-改进

上一篇提出了一种改进主从延迟的方案。虽然能够实现主从无延迟同步,但在维护上比较复杂,还存在网络消耗问题,这里是一个改进的版本。

 

一、之前方案简述及问题分析

方案如图。其中用多个MySQL充当transfer的角色。每个transfer负责同步master的一部分表。在我的试验中有8个transfer,也就是有8个MySQL实例。

 

问题: 1、维护复杂。在从库及其上需要增加8个实例,增加维护成本,而且不利于加表操作。

       2、增加网络开销。虽然在transfer的IO线程作了过滤,减少每个transfer的写盘量和SQL线程的空转,但master还是向每个tranfer发了所有的数据。网络传输的日志量是原来的n倍。

 

二、改进方案

基于上述的两个问题考虑,考虑将transfer的多进程改成多线程。

如图:

 

    1、用一个MySQL充当transfer。 transfer设置为master的主库。IO线程负责接收Master传过来的日志。但不是写到一套relay-log文件,而是SLAVE_THREAD套。每个表的日志固定分配到一套relay-log中

   

 

2、相应地起SLAVE_THEAD个SQL线程,负责读取对应目录下的relaylog,发送给slave。

 

 

三、方案对比

从上面描述中看出,master发给transfer的日志总量只有一份。只需要增加SLAVE_THREAD 和 slave信息的配置,维护简单。

两个方案的相同点是使用文件队列(多套relaylog),保证在transfer出现异常时不丢数据。

效果对比,原生版本

 

上个方案

 

 

改进方案

 

 

说明:改进方案也能保证无延迟同步,性能都是原生版本的7倍左右。由于线程更少,从库的QPS表现很稳定,cpu idle也比上个方案高。

 

 

四、两个为什么

 

1、为什么不直接把transfer当slave用?

    实际上是可以的,作了简单实验发现与“改进方案”的从库QPS相同,好处是减少了一层transfer的逻辑。一般来说这种工具也不会放到和slave一个机器,直接用作slave就少了一个机器。

    不过直接改slave的代码还是推广比较麻烦。而且不得不承认的是,这个方案存在一个硬伤:跨表更新的语句顺序无法严格保证。――这也是这两个方案的应用前提:没有跨表语句或者对这种出现的情况要求不严格。

 

 

2、为什么不直接写一个工具而用MySQL?

        其实作transfer的MySQL并不像想象的那么庞大。不需要的引擎可以都不编译进去,其实只需要框架层的逻辑和一个myisam引擎即可。而它提供了很多管理命令,比如一个现成的客户端,能够方便的stop slave、change master,能够用show slave status看同步状态。这些作为这个工具的基本功能,自己一个个实现重复轮子太多了。

 

好吧,我就是偷懒。。。

 

MySQL主从同步延迟解决 另一方面,由于SQL Thread也是单线程的,当主库的并发较高时,产生的DML数量超过slave的SQL Thread所能处理的速度,或者当slave中有大型query语句产生了锁等待那么延时就产生了。innodb_flush_log_at_trx_commit = 1 之类的设置是需要的而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也可以设置为0来提高sql的执行效率。单个库读写分离,一主多从,主写从读,分散压力。 阅读详情

相关推荐

模拟滤波器的基础知识和设计

使用Python实现多种模拟滤波器

faltas的博客 3530

mysql 主从提高性能_主从同步、读写分离、mysql性能调优(软优化)

配置mysql主从同步1 主从同步的作用:让slave身份的数据库服务器自动同步master身份的数据库服务器上的数据。一、主数据库服务器的配置192.168.4.121 用户授权mysql> grant replication slave on *.* toslaveuser@"192.168.4.11" identified by "123456";2 启用binlog日志v...

weixin_39843986的博客 526

台达PLC使用RS485Modbus指令通信

台达PLC,RS485,Modbus RTU,从站梯形图,0X01,0X02,0X05,CRC校验

lilililimu的博客 1万+

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

https://www.jianshu.com/p/634c661227d4 Mysql主从的基本原理,主要形式以及主从同步延迟原理(读写分离),导致主库从库数据不一致的问题及解决方案。 一、主从数据库的区别 (1)主从分工 其中Master负责写操作负载,一切写的操作都在Master上执行,读的操作分摊到Slave上进行。在一般互联网应用中,经过数据分析调查得着:读写比例是10:1左右。在写的操作上会触发大量的行锁、表锁、块锁,都是降低系统执行效率的事情,所以采用读写分离,把写操作都集中到一个

yygr的博客 4822

信号转换为图像 时域频域分析

一维信号如何转化为图像?深度学习如何学习 1.当然,直接1d卷积也是可以的。 2. 以信号强度的数值作为纵坐标,以时间为横坐标绘制信号点就可以了。 周霖那个即是 要看看代码是如何做的, 即使是单导联 5000个点,怎么变成50005000的分辨率的 3. 直接把多通道的一维信号合并成二维图像,然后直接按图像卷积的方法去做~~ 2225000这样一个图 ~可以看看语音处理的相关Net,其中比较...

王不留行嘿呦嘿 2万+

华为项目TR5评审后发现了重大缺陷的应急处理经验

华为TR5评审后发现重大缺陷时,启动分级应急机制:1)缺陷分级:按严重性(致命/严重/一般)评估影响;2)应急响应:跨部门会议制定方案,冻结生产并调配资源;3)根因修复:通过RCA定位问题,设计变更后回归测试;4)变更管理:评审修复影响,调整发布策略;5)持续改进:记录缺陷闭环,优化流程。案例显示,软件闪退问题通过热修复补丁和代码重构解决。关键工具包括Jira、FMEA等,确保缺陷在量产前拦截,降低风险。

从技术实践立足,从项目管理方法论延伸思考 1069

Mysql主从同步数据最快速的方法

场景1:单台数据库,四个数据库,test1,test2,test3,test4,平均个库10G文件,共40G 正常主从步骤,备份(三个小时),传输(一个小时),导入(三个小时),mysql主库需要锁表至少连续7个小时,这个线上是很难接受的 优化后的方案只需要分开四次,每次主库锁表只需要40分钟左右 操作1:mysql 主库锁表,记录Relay_Log_File,Read_Master_Log_Pos,导出数据库。 注意:FLUSH TABLES WITH READ LOCK;锁表为线程锁,当断开当前连

u012129033的博客 1483

利用eds editor生成CANOPEN 设备eds文件

通过以上步骤,您可以根据实际设备的功能特性,自动生成一份符合CANopen协议标准的电子数据表(EDS文件),该文件可以被上位机软件或其他CANopen主站设备用于识别、配置和控制您的CANopen从站设备。使用CANopen EDS Editor生成CANOPEN设备的EDS文件是一个系统化的过程,它涉及将设备的具体技术参数和功能映射到CANopen规范定义的对象字典中。

weixin_38604759的博客 6460

优化mysql slave的同步速度

测试环境:Red Hat Enterprise Linux Server release 6.3 (Santiago)Server version: 5.6.22-log MySQL Community Server (GPL) 我搭建了1主3从的环境,准备测试MHA架构,过程中发现,测试并发插入的时候,从库1可以跟上,从库2,3跟不上 如何判断是io thread慢还是 sql t...

weixin_30748995的博客 305

RK3576+IMX415 MIPI摄像头零拷贝显示系统

MIPI CSI-2是嵌入式视觉系统中主流的高速图像传感器接口标准,其核心价值在于低延迟、高带宽与硬件级DMA直通能力。基于V4L2子系统与DRM/KMS驱动栈,可构建从传感器RAW数据到帧缓冲区的零拷贝通路,显著降低CPU负载并提升实时性。该技术广泛应用于工业检测、边缘AI推理前数据接入及多路同步采集等场景。本文以Rockchip RK3576 SoC和索尼IMX415传感器为典型组合,详解MIPI物理层适配、内核驱动集成、GStreamer零拷贝管道搭建及systemd服务化部署,覆盖从硬件信号完整性到

weixin_36047538的博客 217

【技术解析】AlexNet——从ReLU到Dropout的深度学习关键突破

本文深入解析AlexNet在深度学习领域的关键突破,重点探讨了ReLU激活函数和Dropout技术的革命性应用。作为卷积神经网络的里程碑,AlexNet通过ReLU解决梯度消失问题,利用Dropout有效防止过拟合,为现代深度学习模型奠定了重要基础。这些创新技术至今仍在计算机视觉和自然语言处理等领域发挥重要作用。

weixin_33719619的博客 273

MySQL--主从复制--04--主从同步的延迟等问题、原因及解决方案

一、相关参数 1.1、同步的参数 首先在服务器上执行"show slave satus;",可以看到很多同步的参数 Master_Log_File SLAVE中的I/O线程当前正在读取的主服务器二进制日志文件的名称 Read_Master_Log_Pos 在当前的主服务器二进制日志中,SLAVE中的I/O线程已经读取的位置 Relay_Log_File SQL线程当前正在读取和执行的中继日志文件的名称 Relay_Log_Pos 在当前的中继日志中,SQL线程已读取和执行的位置 Relay_Master_L

zhou920786312的博客 1632

某物data魔改与变种算法还原(含加解密Py纯算)

某物data加解密、设备指纹魔改、变异、自定义加密分析与纯算还原

吴秋霖的博客 1281

mysql 同步加速_一种MySQL主从同步加速方案

转载自:http://dinglin.iteye.com/blog/1179574一、问题起源MySQL的主从同步一直有从库延迟的问题,背景资料网上很多,原因简单描述如下:1、 MySQL从库上有一个IO线程负责从主库取binlog到写到本地。另外有一个SQL线程负责执行这些本地日志,实现命令重放;2、 正常网络状况下IO线程没有性能问题(这个待会会用到),问题是SQL线程只有一个,更新速度跟不上...

weixin_39762075的博客 646

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【MySQL】MySQL主从同步延迟原因与解决方案

同步参数调整主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置是需要的而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也可以设置为0来提高sql的执行效率。MySQL的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高。单个库读写分离,一主多从,主写从读,分散压力。

DreamSun的博客 4715

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【数据库】MySQL主从同步失败或重启后需要重新配置同步,主从同步延迟解决方案,mysql主从同步加速

【数据库】MySQL主从同步失败或重启后需要重新配置同步,主从同步延迟解决方案:架构方面 1.业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。 2.单个库读写分离,一主多从,主写从读,分散压力。这样从库压力比主库高,保护主库。 3.服务的基础架构在业务和mysql之间加入memcache或者redis的cache层。降低mysql的读压力。 4.不同业务的mysql物理上放在不同机器,分散压力。 5.使用比主库更好的硬件设备作为slave

wenchun001的博客 2197

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

一种MySQL主从同步加速方案

一、问题起源 MySQL的主从同步一直有从库延迟的问题,背景资料网上很多,原因简单描述如下:     1、 MySQL从库上有一个IO线程负责从主库取binlog到写到本地。另外有一个SQL线程负责执行这些本地日志,实现命令重放;    2、 正常网络状况下IO线程没有性能问题(这个待会会用到),问题是SQL线程只有一个,更新速度跟不上。所以经常会看到从库的CPU idle很高,但同步性能就...

追风刀·丁奇 244

加速MySQL主从同步,核心架构设计思路!(第23讲)

《架构师之路:架构设计中的100个知识点》23.MySQL主从同步加速架构MySQL主从同步为什么这么慢?如上所示,主库binlog同步到从库,从库单线程落盘relaylog,单线程重放relaylog,在数据量大并发量大的时候,就会很慢。如何来进行优化?可以多线程并行重放relaylog来缩短同步时间。多线程并行重放能否保证与主库数据的一致性?例如:三个set语句,分在三个线程重放,不能保障与主...

shenjian58的博客 721

MySQL:主从同步

以上就是MySQL主从复制的过程及常见的问题,涵盖了参与复制的核心组件、同步方式、复制线程等要点。

ql_gome的博客 1501

加速MySQL主从同步速度的核心架构设计思路

主要包括以下几点:多线程并行重放Relay Log:传统的MySQL主从同步是单线程落盘Relay Log和单线程重放Relay Log,这在数据量大并发量大时会导致同步速度慢。通过多线程并行重放Relay Log可以缩短同步时间。确保并发回放的幂等性:在并行重放时,需要保证数据一致性。可以通过“按照库幂等”和“按照组幂等”两种方式来实现。同一个MySQL实例中的同一个DB库由一个线程来重放,不同的DB库由不同的线程并行重放。升级MySQL版本:MySQL 5.5不支持并行复制,MySQL 5.6开始支持按

xu990128638的专栏 511

MYSQL主从同步数据延迟及解决方案可行性研究

场景描述 当我们成功搭建了MYSQL 主从复制,读写分离,如果在并发量和数据量不大的情况下,使用起来是非常流畅的。但是在高并发的情况下, 主库接收大量的写请求操作,在短时间内产生了大量的binlog。这些操作需要全部到从库,并且执行。因此产生了主从数据库的数据不一致,这种情况下,如何解决呢? 如何判断是否存再主从延迟的方法 MySQL提供了从服务器状态命令,可以通过 show slave status 命令进行查看。 主要看 Seconds_Behind_Master参数的值来判断,是否有发生主从延时。

zhuzhoulin的博客 559

MySQL主从同步延迟原因与解决方法

MySQL主从同步延迟原因与解决方法

huanhuanzhou blog 1518

mysql data transfer_MySQL主从同步加速 Transfer-- FAQ

Q: Transfer是什么A: 是一个解决MySQL原生主从同步延迟的方案。 Transfer本身是一个在MySQL源码上打的patch,可以用于当Slave,也可以用于当第三方工具,将Master的数据同步发给Slave。 利用多线程实现主从无延迟。Q: Transfer目前的发布形式?A: Transfer会在今年内开源,目前的发布形式是可执行的mysqld文件。 有两个版本,分别是官方的5...

weixin_29564301的博客 333
上一篇: MySQL非源码学习:关于存储过程的中游标两个容易忽略的点
下一篇: MySQL源码学习:MySQL中禁止跨库访问的实现
iteye_621
博客等级 码龄8年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值