前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >并行复制的一个问题

并行复制的一个问题

作者头像
AsiaYe
发布2019-11-06 11:48:24
7290
发布2019-11-06 11:48:24
举报
文章被收录于专栏:DBA随笔DBA随笔

MySQL中并行复制

这两天遇到了一个问题,就是一个业务的并发量比较高,在进行MySQL的并行复制的时候,经常会遇到sql线程断开的情况,查看错误日志则是说update了一个不存在的记录,IO线程是处于正常复制的状态,这个问题思考了一段时间,也查看了一些博客,总结了一些解决的办法,并且成功解决了这个问题,这里简单罗列一下:

  1. 修改slave_exec_mode参数

这个参数是与MySQL的复制相关的,可以动态进行修改,这里给出官方文档连接:

https://dev.mysql.com/doc/refman/5.7/en/replication-options-slave.html#sysvar_slave_exec_mode

这个参数的默认格式是strict模式,也就是严格模式,还有一种模式是idempotent模式,也就是幂等模式,设置成idempotent模式可以让从库避免Error code 1032(从库上不存在某个记录)以及Error code 1062(重复的记录,需要存在主键)这两个错误,需要注意的是这个模式只是binlog模式是row的时候生效,在statement模式下不生效。

实际上我们解决这个问题就是使用的上面这种方法。

从原理上面将,这个参数的本质是跳过那些错误的语句,这个时候,可能有些同学会想了,这个跳过的功能,sql_slave_skip_counter参数和slave-skip-errors也可以做到,那么下面这三个参数有啥区别呢?

slave_exec_mode参数;

sql_slave_skip_counter=N参数;

slave-skip-errors=N参数。

这个我们会另外用一篇文章来讲述,今天重点不是这个。

2.修改参数slave_preserve_commit_order

这个参数从名字就可以看出来,是为了保证并行复制的时候slave上面的事务提交顺序,从而避免出现事务乱序导致的记录不存在问题,除此之外,需要将参数binlog_order_commits的值改为on,这个参数保证了binlog中的事务排序。

这种方式在实践操作的过程中还是不能完全避免sql线程的错误,但是可以有效的减少错误次数,之前可能每5分钟报一次,现在可能会变为15分钟报一次,可以说是有一些作用的。

3.写脚本,在出现错误的时候自动处理

这种是不得已而为之的方法,就是写脚本按照指定的时间去抓这个断裂的点,然后设置gtid_next的值,然后通过set session gtid_next那一套操作进行解决。

要想彻底的剖析这个问题,恐怕还得从并行复制的原理入手,这个留作一个任务吧,后续将用文章来讲述并行复制原理。今儿就到这里吧。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档