首页 > 问答 > 关键词 > MySQL最新资讯 > 正文

MySQL从库实用技能教程 巧用slave_exec_mode参数

2020-07-02 10:57 · 稿源:数据库干货铺

MySQL从库实用技能教程,巧用slave_exec_mode参数。想必从库异常中断的情况不在少数,其中报错信息中 1032 及 1062 的错误占了不少的比重

错误 1032 指的是从库中找不到对应行的记录

错误 1062 指的是主键冲突

遇到此报错时,大多DBA会使用如下方法进行处理

1 手动处理

方法一: 找出引起异常的数据然后手动在从库处理后重启SQL线程继续观察;

根据报错的信息,通过mysqlbinlog解析binlog日志,找到对应的数据,然后查看从库是否缺失数据或者已存在对应主键的数据,然后手动在从库处理对应记录的数据。处理完毕后再次开启同步。

但是,后续还得观察是否再次出现错误

方法二: 手动跳过 1 个或更多个事务,然后继续观察。

/* 传统点位模式复制 */SQL>set global sql_slave_skip_counter=1;
SQL>start sql_thread;/* GTID模式复制 */SQL>set gtid_next='e29d3917-9dbb-11e9-8b64-e4434b6e2c80:11103335-16054791';
SQL>begin;commit;
SQL>set gtid_next='AUTOMATIC';

注意,手动跳过事务的方式存在一个很大的缺点:1 个事务中存在多个sql,用此方式,本事务中的其他SQL也会被跳过(具体的和binlog-format有关,对于当前常用的ROW格式均有影响)。

2  持续跳过错误

但是,如果一直报错,但是,这些报错又可以忽略可以怎么处理,此时也有很多方法,通常使用的是如下几种:

方法一:  使用pt-slave-restart工具跳过对应错误

但是使用pt-slave-restart工具跳过报错时,必须关闭多线程复制,因为工具分不清到底哪个线程复制出了问题,然后会报类似如下的报错:

Cannot skip transactions properly because GTID is enabled and slave_parallel_workers > 0.  See 'GLOBAL TRANSACTION IDS' in the tool's documentation

处理步骤为:

/*暂停并行复制*/SQL> set global slave_parallel_workers=0;/*使用pt-slave-restart工具跳过错误(填写错误号)*/pt-slave-restart  --user=root --password='Admin@123' --socket=/data/mysql3306/tmp/mysql.sock--error-numbers=1062/* 不再报错时,再开启并行复制 */mysql> set global slave_parallel_workers=8;

方法二:  在配置文件里配置跳过指定错误

在配置文件[mysqld]项里加入参数slave-skip-errors

slave-skip-errors=1032,1062

但是,此方法存在一个致命缺点:该参数是静态参数,无法动态修改,需要修改配置文件后重启数据库方可生效。

3  幂等模式

因为手动跳过事务时,会忽略相同事务下的其他正常的SQL在从库的应用;pt-slave-restart工具需要停止多线程复制,影响从库应用速度;配置slave-skip-errors又需要重启数据库方可生效。那么有没有一种方式既不会跳过多余的SQL,又无需重启数据库也不影响从库应用SQL的速度呢?答案是有的,也就是将slave_exec_mode参数设置为IDEMPOTENT,即幂等模式(默认为严格模式STRICT)。

/*在线动态修改 */SQL > set global slave_exec_mode='IDEMPOTENT';

改为幂等模式后,可以忽略 1032 及 1062 的错误,对同一事务内的其他SQL无影响,依旧能正常执行。

4. 结语

本文中没有举具体案例进行实战演示,不过建议大家还是自行搭建环境进行场景复现的演示(在从库先插入部分数据或先更新部分数据),然后再在主库执行,即可出现 1062 或 1032 的错误。

很多初学者或实战经验不足的同学可能不知道该参数,因此,更加建议在多种场景下测试。

本文转载自微信公众号【数据库干货铺】。

网友热搜:

  • 相关推荐
  • 大家在看
  • docker怎么安装MySQL docker安装MySQL教程

    把MySQL放进Docker,总共需要几步?本次就通过社区版容器安装2个mysql实例,看一下部署有多简单。

  • MySQL8.0窗口函数做数据排名统计详细教程

    MySQL8.0新增了窗口函数,大大的方便了做数据排名统计的人,很多朋友还不清楚怎么用MySQL8.0做数据统计排名,下面就来为大家分享一篇文章。

  • MySQL统计库表大小都是多少

    统计每个库每个表的大小是数据治理的其中最简单的一个要求,本文将从抽样统计结果及精确统计结果两方面来统计MySQL的每个库每个表的数据量情况。

  • MySQL怎么按指定字符合并及拆分 详细实例分析

    按照指定字符进行合并或拆分是经常碰到的场景,MySQL在合并的写法上比较简单,但是按指定字符拆分相对比较麻烦一点(也就是要多写一些字符)。本文将举例演示如何进行按照指定字符合并及拆分。

  • mysql怎么处理大表在不停机的情况下增加字段

    MySQL中给一张千万甚至更大量级的表添加字段一直是比较头疼的问题,遇到此情况通常该如果处理?本文通过常见的三种场景进行案例说明。

  • MySQL的user表被删除了怎么办 user表被清空解决办法

    ​近期就有人遇到user表内容被清空的情况。如果发生了此情况,千万不要慌,更不能隐瞒问题(今天这位朋友就比较惨,别人删了也没敢告知,结果binlog已经清理了),这样有利于恢复。现在针对几种情况,进行恢复操作的演示。

  • 特斯拉Model Y开启国际交付

    DoNews 6月11日消息(记者 刘文轩)特斯拉(Tesla)周二正式开始首款Model Y车辆国际交付。Teslarati发现,已经有加拿大温哥华的客户在Instagram上展示他们购买的最新款特斯拉全电动汽车。该车主在Instagram分享了一张照片,照片中有一辆深蓝色Model Y被送到加拿大新车主的手中。特斯拉温哥华展厅顾问Charlie Wang也证实了这一消息,Model Y在6月开始在温哥华交货。Model Y长续航版本在加拿大的起步价为75990加元,约59720美元;性

  • 特斯拉弗里蒙特工厂Model 3总装线或有减少 一条改为Model Y总装线

    6月10日消息,据国外媒体报道,特斯拉位于加州弗里蒙特的组装工厂,在今年一季度已开始组装去年3月份推出的跨界运动型多用途汽车Model Y,部分幸运的消费者已经收到了他们此前预订的这一款电动汽车。特斯拉跨界运动型多用途汽车Model Y但从外媒最新的报道来看,弗里蒙特工厂的Model Y总装线,可能是此前用于组装Model 3的生产线。弗里蒙特工厂Model Y总装线此前可能是Model 3总装线,源自外媒获得的特斯拉CEO马斯克的?

  • 特斯拉Model 3国产性能规格公布,Model3高性能全轮驱动版详细介绍

    特斯拉Model3 国产性能规格怎么样?6 月 28 日晚,特斯拉中国在官网发布了Model3 高性能全轮驱动版车辆的国标工况续航里程,续航里程测试结果为635km,百公里加速时间为3. 4 秒,时速可达 261 公里/小时。

  • 马斯克:特斯拉并未开发搭载100kWh电池组的Model 3/Model Y

    6月17日消息,据国外媒体报道,此前,有传闻称,特斯拉正开发一款搭载100kWh电池组的Model 3/Model Y。对此,该公司CEO埃隆·马斯克予以否认。此前,一名叫“Zeus M3”的黑客访问了特斯拉Model 3的“工厂模式”(Factory Mode)。他在推特上分享的截图显示,有一款Model 3或者Model Y似乎搭载100kWh的电池组。这名黑客的爆料引发了许多猜测,其中最有趣的是有关车辆续航里程增加的猜测。目前,Model 3配备的电池组最高

  • 特斯拉Model 3一季度成加州最畅销的汽车

    今年第一季度,特斯拉电动汽车Model3 成为加州最畅销的汽车。根据加州新车经销商协会截至今年 3 月 31 日, Model3车售出了 18856 辆。这个数字超过了任何竞争对手的汽车,甚至超过了大众市场的汽车和跨界车。

  • 特斯拉正式开始Model Y的国际交付 从加拿大开始

    【TechWeb】6月11日消息,据国外媒体报道,当地时间周二,电动汽车制造商特斯拉正式开始了Model Y的国际交付,首先从加拿大开始。特斯拉温哥华门店顾问Charlie Wang表示,该公司将从6月份开始在加拿大温哥华交付Model Y。特斯拉预计,将在2021年上半年的某个时候开始向欧洲和亚洲的主要市场进行Model Y的国际交付。特斯拉是在去年3月份推出Model Y的,这款车是一款跨界运动型多用途汽车,最多可搭载7名乘客,续航里程最高为300英?

  • 马斯克证实:特斯拉正面临提高Model Y产量问题

    【TechWeb】6月9日消息,据国外媒体报道,电动汽车制造商特斯拉的CEO埃隆·马斯克在发给员工的一封电子邮件中证实,特斯拉正面临提高Model Y产量的问题。特斯拉是在去年3月份推出Model Y的,这款车是一款跨界运动型多用途汽车,最多可搭载7名乘客,续航里程最高为300英里(约482公里)。今年1月,特斯拉证实,该公司已开始在弗里蒙特工厂生产Model Y,这距离该公司推出这款车不到一年时间。今年3月,外媒报道称,该公司已经正式开

  • 定位低于Model 3!特斯拉或为中国生产紧凑型新车

    今年早些的时候,特斯拉CEO埃隆·马斯克曾表示,特斯拉计划在中国开设设计中心,生产和销售更符合中国消费者需求的产品。日前,特斯拉(中国)在其官方微信公众号上宣布,正式公开邀请设

  • 特斯拉被车主集体起诉 因Model 3不到一年就掉漆老化

    特斯拉正面临着一项新的集体诉讼,主要原因为,Model3 车辆在寒冷天气中,存在油漆严重受损的问题。这些车主要求特斯拉赔偿,并给出一定的经济补偿。据发起集体诉讼的车主称,他们的Model3 车辆,冬天在洒满盐和沙子除雪的路面上行驶时,车辆的油漆降解速度快的惊人。

  • 比特斯拉Model S还牛?直接对标奔驰S的美国造车新势力来了

    日前,美国硅谷初创电动车企Lucid宣布旗下首款车型——Lucid Air量产版将于9月9日正式亮相。与此同时,官方还公布了Lucid Air的风阻系数为0.21Cd,已经超过目前很多优秀的纯电动车。

  • 特斯拉Model 3开启Autopilot撞上警车 司机被指控过失驾驶

    【TechWeb】7月1日消息,据国外媒体报道,特斯拉的Autopilot自动辅助驾驶系统,已经开卖多年,虽具备一定的辅助驾驶能力,但仍要求司机注意力高度集中。但即便如此,仍有很多司机在开启Autopilot自动辅助驾驶系统之后,未将注意来集中在道路上,进而导致车祸。去年12月份,美国就有一名特斯拉Model 3的车主,在开启Autopilot自动辅助驾驶系统之后不集中注意力,最终撞上了一辆停在路边的警车,这名司机目前已被指控过失驾驶。被指

  • 特斯拉电动卡车Semi再度现身 已在参与运输Model 3

    6月28日消息,据国外媒体报道,特斯拉在2017年11月份推出了电动卡车Semi,入门版售价15万美元,已获得了来自沃尔玛、快递公司DHL、啤酒生产商百威英博、百事可乐等多家公司的订单。特斯拉电动卡车Semi虽然还未量产并交付,但特斯拉电动卡车Semi的原型车,已多次出现在大众的视野中,2019年的9月份,电动卡车Semi的原型车就曾现身皮克斯总部,当时还有多辆特斯拉电动汽车跟随。而从外媒的报道来看,时隔9个多月之后,特

  • 特斯拉内部邮件泄漏 8年前就知道Model S存在隐患

    6月28日消息,据国外媒体报道,特斯拉电动汽车在过去几年曾发生多起碰撞起火事故,导致多人伤亡,但让人不解的是,2018年和2019年,多辆特斯拉Model S在没有发生事故的情况下也突然起火。而最新泄漏的邮件显示,早期的Model S电池系统存在设计缺陷,特斯拉8年前就知道存在这一问题。特斯拉知晓Model S存在隐患,源自泄漏的特斯拉2012年的内部邮件,主要是冷却液管的末端连接配件不符合要求,铝合金的强度未达到化学要?

  • 特斯拉Model Y已在欧洲上路测试 检验超级充电等性能

    据国外媒体报道,在今年一季度开始在美国开始交付之后,特斯拉在上周已将去年3月份推出的跨界运动型多用途汽车Model Y的交付范围,扩大到了加拿大。从外媒最新的报道来看,特斯拉也在谋划在更多市场交付Model Y,这一款电动汽车已在欧洲上路测试,为获准交付做准备。外媒的报道显示,Model Y在欧洲道路上的测试,是从德国开始的,随后前往荷兰,在到达荷兰南部城市蒂尔堡之前,测试中的Model Y还进入了一

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议