mysql 线程错误_(5.11)mysql高可用系列——复制中常见的SQL与IO线程故障

【1.1.1】先在从库上创建一个用户,再去主库上创建一个用户

-- 从202:

create user 'test'@'%' identified by '123456';

grant all privileges on *.* to 'test'@'%';

flush privileges;

-- 主202:

create user 'test'@'%' identified by '123456';

grant all privileges on *.* to 'test'@'%';

flush privileges;

use test;

create table test3(id int);

insert into test3 values(1);

commit;

【1.1.2】核验同步

发现不同步

4d34e8f7fa8924915b9fa20686a6939a.png

71232a6a79680cc3ef5a19bcaacf6855.png

在从库202执行:

show slave status\G  -- 查看状态

发现错误:

c27055159cea2854d01612b6979d9c14.png

这里显示的GTID,指的是,需要执行这个GTID事务失败了,也就是说,真正出问题的是该GTID上面那个事务。

【1.1.3】核验错误信息

根据图上的文件名和位置在主库上查看执行的信息是什么;

果然是创建用户报错了。

baaa4dcef4546839f1525c7f39174db4.png

从这个图,根据位置信息和GTID,应该就可以应征上面标红说的。

查看更详细的信息;在从库上运行

select * from performance_schema.replication_applier_status_by_worker\G

6b6a5426092f9b26e897265b86d0476e.png

Read_Master_Log_Pos: 2174

Exec_Master_Log_Pos: 1112

38629a96575ddce9b6a1fd0b1ce29f96.png

记得,这个错误号,就是我们报错的那个,要对应否则可能是其他时间出现的错误信息;

【1.1.4】解决,跳过、屏蔽这个冲突事务

在从库上:直接指定,下一个执行的事务,为错误信息上显示的事务(因为这里显示的GTID,是说执行到这个点出错,这个GTID所在的事务没有执行)

(1)由于在这个GTID必须是连续的,正常情况同一个服务器产生的GTID是不会存在空缺的。

所以不能简单的skip掉一个事务,只能通过注入空事物的方法替换掉一个实际操作事务。

(2)注入空事物的方法:

stop slave;

set @@session.gtid_next='de853101-b165-11e9-900a-000c291f4171:8';

begin;commit;

set @@session.gtid_next='automatic'; -- 不改回来,很多报错

start slave;

如果 set @@session.gtid_next='automatic';这时候,报错如下。

那么意思是还没重做完,等一下再操作即可。

mysql> set @@session.gtid_next='de853101-b165-11e9-900a-000c291f4171:18';

ERROR 1766 (HY000): The system variable gtid_next cannot be set when there is an ongoing transaction.

【1.1.5】核验

show slave status\G -- 查看进程状态与错误信息 是否OK

use test;show tables; -- 查看数据是否同步过来,OK了啊

d50bf66a0295a6d5ec2decec92379e19.png

【1.1.6】如果是主库的最后一条事务报错,怎么办?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值