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

关键词:mysql复制故障处理

【1】手工处理的gtid_next(SQL线程报错)

   例如:主键冲突,表、数据库不存在,row模式下的数据不存在等。

  【1.1】模拟故障:GTID模式下的重复创建用户

【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】核验同步

发现不同步

 

在从库202执行:

 show slave status\G  -- 查看状态

 发现错误:

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

 

 【1.1.3】核验错误信息

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

 果然是创建用户报错了。

 

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

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

  select * from performance_schema.replication_applier_status_by_worker\G

  

  Read_Master_Log_Pos: 2174

  Exec_Master_Log_Pos: 1112

 

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

【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了啊

  

 

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

 

 【1.2】如果是非GTID模式下

1.跳过指定数量的事务:(建议如果已经出现了错误,使用这种办法)
mysql>slave stop;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; #跳过一个事务
mysql>slave start;

 

 

相关文章:

  

  mysql复制的日常管理维护,mysql复制常见问题处理

转载于:https://www.cnblogs.com/gered/p/11440030.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值