专栏首页二狗的DBA之路[转] slave_exec_mode=IDEMPOTENT的行为小结

[转] slave_exec_mode=IDEMPOTENT的行为小结

原文: https://www.jianshu.com/p/bd6f7c3e5b50

slave_exec_mode=IDEMPOTENT 在MySQL复制环境中是个很有用的参数:只要在备机运行set global slave_exec_mode=IDEMPOTENT ,备机的sql thread就运行在冥等模式下,可以让备机在insert主键、唯一键冲突,update、delete值未找到错误发生时不断开复制而保持冥等性(当即生效,连slave的sql线程都不用重启哟);而类似sql_slave_skip_counter=N和slave-skip-errors = N 这样的粗暴跳过错误方法可能破坏主备一致性。但官方文档的描述很简洁,我一直好奇slave_exec_mode=IDEMPOTENT 是如何在复制出错时保持一致性的--譬如主键冲突时是简单跳过还是覆写,今天在Percona 5.7下做了个实验(binlog是row格式),实验过程就省略了,直接总结如下: 1.insert场景 此时insert into语句在备机的效果就跟replace into一样,但却并不是把insert into转换成replace into来执行,分两种情况: a.MySQL配置成autocommit,直接一条insert into ... 如这样的insert insert into test set c1='a',c2='b'; 此时insert into语句在备机执行时假如遇到主键冲突就先转化为delete再insert delete from test where c1='old_value' and c2='old_value';    insert into test set c1='a',c2='b';    假如遇到非主键的唯一键冲突就转换为update update test set set c1='a',c2='b' where c1='old_value' and c2='old_value'; b.当显示开始事务时(begin...insert into...commit;) 如这样的sql begin;    ......  insert into test set c1='a',c2='b';    ......  commit;    此时begin...commit里的insert into语句在备机执行时假如遇到主键冲突、唯一键冲突都是先转化为delete再insert begin;    ......  delete from test where c1='old_value' and c2='old_value';    insert into test set c1='a',c2='b';    ......  commit;    2.update场景 当备机不存在要更新的记录,这条update跳过不执行 3.delete场景  同update场景一样,备机跳过此delete啥也不干 注意:使用冥等模式时表要有主键 冥等模式并不是万能的,除了不能对DDL操作冥等,对字段长度不同导致的错误也不是冥等(譬如主机一个字段是char(20)而备机是char(10)),还有一个限制就是表有主键才会对insert的冥等设置有效:因为insert的冥等行为是通过主键来判断备机是否有重复值从而产生覆写操作,如果表没有主键,则备机即使设了冥等也可能会比主机多重复数据。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL表自增id溢出的故障复盘

        tokudb引擎的一个大表tb1,存放业务上的机审日志,每天有大量的写入, 并且由于历史原因,这张表是int signed 类型的,最大只能存 2147...

    二狗不要跑
  • prometheus2.0 联邦的配置

    prometheus2.0 在参数上有原先的1.X有较大的变化,很多参数被去掉了。另外优化了CPU占用、存储空间占用等,具体可以看官方文档。

    二狗不要跑
  • Linux下搭建DNS 服务器

             bind-utils # 工具,包含dig,nslookup等网络诊断工具。

    二狗不要跑
  • 新CG新武器,《源震》等你来玩!

    VRPinea
  • NVIDIA 为未来无人自动驾驶交通工具推出人工智能超级计算机“Xavier”

    NVIDIA 执行长黄仁勋在首届 GPU GTC Europe 大会上,介绍 NVIDIA 为自动驾驶车所设计的全新人工智能超级计算机“Xavier”。 “这是...

    GPUS Lady
  • 快递官网漏洞泄露1400万用户信息

    继酒店业、电商网站等因网站漏洞个人信息遭泄露后,快递企业网站再曝漏洞。昨日,有消息称,多家快递网站因存在漏洞遭黑客入侵,有1400万条个人信息在 ...

    安恒信息
  • RTSP转RTMP-HLS网页无插件视频直播是如何通过流媒体服务EasyNVR、EasyDSS、EasyGBS实现的?

    背景需求 对于摄像机直播,客户反馈的最多就是实现web直播、摆脱插件,可以自定义集成等问题,对于大家熟悉的EasyNVR已经完美的解决了这些问题。然而对于web...

    EasyNVR
  • Coursera吴恩达《序列模型》课程笔记(1)-- 循环神经网络(RNN)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    红色石头
  • C语言之实现控制台光标随意移动C语言实现控制台中光标随意移动

    原理引入windows.h,首先是要获得输入的东西,然后通过判断: 1.方向键:执行上下左右的移动功能 2:回车键:执行换行的功能。 3.普通键:输入功能。 终...

    互联网金融打杂
  • 分享winsows server 2008 R2的防火墙设置

    力哥聊运维与云计算

扫码关注云+社区

领取腾讯云代金券