Slave SQL for channel '': Error 'Operation ALTER USER failed for 'root'@'%'' on

557 阅读1分钟

一、说明

mysql主备库修改主库root用户密码导致备库报错。

二、报错内容

mysql错误日志:Slave SQL for channel '': Error 'Operation ALTER USER failed for 'root'@'%'' 
on query. Default database: ''. Query: 'ALTER USER 'root'@'%' IDENTIFIED WITH 
'mysql_native_password' AS '*F6CB1961EF90C84AB5D168D54FBAE89897AEBF1F'',
 Error_code: 1396

三、分析原因

由于主备库用户不一致导致主库执行root用户修改密码的操作报错,主从同步进程死亡,主库root@%,而备库root@localhost

四、处理步骤

方式一:备库关闭当前会话的写log日志功能set sql_log_bin=0;,在备库增加用户root@%,后开启写入日志set sql_log_bin=1,开启备份SQL进程SLAVE START;

修改备库用户时必须关闭写日志操作,否则日志内会记录用户变更信息,主从切换后还会出现报错。

方式二:通过跳过错误事务方式,mysql>slave stop; mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 #跳过一个事务 mysql>slave start

跳过事务由于当前跳过事务为操作root用户,可以跳过,但跳过数据为数据变更时需要注意主从数据一致的问题;SQL_SLAVE_SKIP_COUNTER = 1,当值为2时,表意不同,不可乱用

mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 0
mysql>CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';
mysql>slave stop;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1        #跳过一个事务
mysql>slave start