前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[转] slave_exec_mode=IDEMPOTENT的行为小结

[转] slave_exec_mode=IDEMPOTENT的行为小结

作者头像
保持热爱奔赴山海
修改2019-09-17 11:44:26
8560
修改2019-09-17 11:44:26
举报
文章被收录于专栏:数据库相关

原文: 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的冥等行为是通过主键来判断备机是否有重复值从而产生覆写操作,如果表没有主键,则备机即使设了冥等也可能会比主机多重复数据。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/12/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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