一、说明
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