MySQL的slave_exec_mode参数说明及用处
admin
2023-05-02 01:41:42
0

下面讲讲关于MySQL的slave_exec_mode参数说明及用处,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完MySQL的slave_exec_mode参数说明及用处这篇文章你一定会有所受益。

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这样的粗暴跳过错误方法可能破坏主备一致性。

注意:使用冥等模式时表要有主键 

冥等模式并不是万能的,除了不能对DDL操作冥等,对字段长度不同导致的错误也不是冥等(譬如主机一个字段是char(20)而备机是char(10)),还有一个限制就是表有主键才会对insert的冥等设置有效:因为insert的冥等行为是通过主键来判断备机是否有重复值从而产生覆写操作,如果表没有主键,则备机即使设了冥等也可能会比主机多重复数据。

针对slave_exec_mode参数,它可以跳过1062和1032的错误,并且不影响同一个事务中正常的数据执行。如果是多个SQL组成的事务,则可以跳过有问题的event。

另外在GTID模式下的复制,sql_slave_skip_counter是不支持的,该模式下的复制可以自行测试。

MySQL的slave_exec_mode参数说明及用处

主从复制中常会遇到的问题就是1062主键重复

主从复制中1032错误一般是指要更改的数据不存在

遇到错误1032或者1062的处理方式:

所以处理该错误的方法有:

1:skip_slavesql_slave_skip_counter

stop slave;                                                                                                                                     Query OK, 0 rows affected (0.00 sec)

set global sql_slave_skip_counter=[1-4];

Query OK, 0 rows affected (0.00 sec)

start slave;

Query OK, 0 rows affected (0.00 sec)

2:在配置文件里指定slave-skip-errors=1062(需要重启)

这2种方法都能让复制恢复正常,但是会让主从数据不一致(谨慎使用),如果一个事务中多个语句,其他的语句也会丢失。

并且第2种方法还需要重启数据库,此时slave_exec_mode参数就派上用场了。在从库上设置该参数:

slave_exec_mode参数可用来自动处理同步复制错误:

# slave上执行

set global slave_exec_mode='IDEMPOTENT';  幂等模式 (默认是STRICT严格模式)

stop slave;

start slave;

slave_exec_mode和slave_skip_errors的作用是一样的,但是slave_skip_errors不支持动态修改,必须重启mysql才能生效,因此建议使用slave_exec_mode。

针对slave_exec_mode参数,它可以跳过1062和1032的错误,并且不影响同一个事务中正常的数据执行。如果是多个SQL组成的事务,则可以跳过有问题的event。

insert into x values(1),(4),(5); #其中从库有id=4这条记录

BEGIN;

INSERT INTO x SELECT 4;

DELETE FROM x WHERE id = 2; #从库没有这条记录

INSERT INTO x SELECT 5;

COMMIT;

#!/bin/bash

# Description: 自动跳过主从复制的错误(错误代码1023、1062) ,这个脚本在slave上执行

#  

user='root'

pass='root'

port='3306'

IP='172.16.10.12'

MYSQLCLI='/usr/local/mysql/bin/mysql'

STATUS=$($MYSQLCLI -u$user -p$pass -h $IP -e 'show slave status\G'|sed -n '13p'|awk -F ":" '{print $2}')

if [[ $STATUS != 'YES' ]];then

    $MYSQLCLI -u$user -p$pass -h $IP -e "SET GLOBAL slave_exec_mode='IDEMPOTENT';"

    $MYSQLCLI -u$user -p$pass -h $IP -e "stop slave';"

    $MYSQLCLI -u$user -p$pass -h $IP -e "start slave';"

    echo -e "地址: $IP\n端口: 3306\n服务: MySQL主从复制发生错误,系统已自动跳过错误,请后续跟进处理。\n发生时间: `date +"%F %T"`" \

    | mail -s '主从复制错误警告'  xxxxxx@xxx.com

fi

对于以上MySQL的slave_exec_mode参数说明及用处相关内容,大家还有什么不明白的地方吗?或者想要了解更多相关,可以继续关注我们的行业资讯板块。

相关内容

热门资讯

卖“毒蛋”的人,抓到了 作者 | 何国胜 编辑 | 向现“(人)抓到了,目前案件正在侦办中。”7月28日晚间,苏州禁毒部门有...
尺素金声丨实施零关税国家达63... 海关总署发布的数据显示,今年5月1日起,我国对53个非洲建交国全面实施零关税举措,目前,我国实施零关...
职业索赔盯上基层诊所,倒逼用药... 文 | 布丁基层诊所正在被职业索赔盯上。据新京报,去年夏天,一男子走进河南南阳一家诊所,要求购买三瓶...
“西瓜我全买了”就可以肆意妄为... 拿西瓜砸了人,把瓜都买了,就能一走了之吗?事实证明,这套逻辑在法治社会行不通。7月28日晚,据海峡都...
科学家在日本广岛发现新物质,系... 在美国对日本广岛进行原子弹轰炸近81年后,科学家们在广岛的沙滩上发现了一种奇异且从未被发现过的新物质...
AI失控,反噬开始 作者 | 贺一 编辑 | 阿树近期,中国开源模型在美国频繁引发热议。7月28日,月之暗面发布Kimi...
“总统千金天价离婚”,分到43... 2026年7月24日下午,首尔高等法院,一场持续近十年的司法拉锯战终于接近尾声。法庭裁定SK集团会长...
巴基斯坦,又拿下一个历史性协议 全世界都没想到,接连的中东大战,巴基斯坦正成为最大赢家。去年以色列追杀哈马斯,空袭卡塔尔首都,阿拉伯...
汇正财经贺峰的一对一指导服务怎...   对于考虑购买证券投资顾问服务的投资者来说,'一对一指导服务怎么样'是一个重要的考量维度。需要首先...
重庆失联00后网格员龚宝冬确认...   重庆失联00后网格员龚宝冬确认遇难  【重庆失联00后网格员龚宝冬确认遇难】2026年7月29日...