暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL主从复制1032错误

原创 谭磊Terry 恩墨学院 2022-07-23
2839

报错现象

数据库集群为一主2从架构,在主库执行下列命令:

update mysql.user set host='%' where user='zbx';
flush privileges; 

一个从库正常,一个从库异常,提示报错,收集Error log信息如下:

[ERROR] Slave SQL for channel '': Worker 1 failed executing transaction '844e3ac3-6965-11e9-8f2a-ccbbfe99cd79:59
694770' at master log master-bin.002358, end_log_pos 868552040; Could not execute Update_rows event on table mysql.user; Can't find record in 'user', Err
or_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log FIRST, end_log_pos 868552040, Error_code: 1032
2020-05-28T20:11:31.644352+08:00 6275217 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'master-bin.002358' position 868551335.

问题分析

从库上出现少数据,Detele,update操作时,找不到相应记录
通过将主库备份恢复发现,主从数据库user=‘zbx’的host内容不一致,而binglog_format=row,mysql.user是以(‘user’,‘host’)为联合主键,所以主库上user=‘zbx’的该条记录实际上是定位到(‘zbx’,‘127.0.0.1’)该记录,而从库相关记录的主键是(‘zbx’,’%’),所以才会报错

image.png

处理方法

  • 通用方法:
    show slave status\G;通过 Exec_master_Log_Pos 和 end_log_pos定位报错操作
    mysqlbinlog -vv --base64-output=decode-rows --start-position=xx --stop-position=xxx mysql-bin.xxxx
    在从库insert缺少的数据,再start slave sql_thread;

  • 如果是主库delete操作在从库找不到数据,可以考虑跳过
    传统position复制:

stop slave sql_thread;
set global skip_sql_slave_counter=1;
start slave sql_thread;

基于GTID的复制需要制作一个空事务:

stop slave sql_thread;
set gtid_next=’主库server_uuid:最后执行的事务序号+1’;
begin;commit;
select @@gtid_next;
set gtid_next=’automatic’;
select @@gtid_next;
start slave sql_thread;

alter修改权限

如果某个ip上执行的SQL特别多(用户为:user@’%’,),导致数据库出现问题,可以先创建一个精细权限的用户(用户为:user@‘172.11.11.11’),赋予它更小的权限(如去掉DML权限),这样那个会话通过用户:user@’%'访问进来,就无法执行DML了

create user 'zbx'@'%' identified by 'zabbix@1234';
GRANT SELECT, PROCESS, REPLICATION CLIENT ON *.* TO 'zbx'@'%';
drop user 'zbx'@'127.0.0.1';
flush privileges; 
  • 备注:
    • alter应该不需要flush的,只有update的才需要flush
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论