在部署mysql主从同步中,从节点执行 start slave 后,出现以下错误
Slave SQL for channel '': Error 'Operation CREATE USER failed for 'msg_mycat'@'192.168.20.%'' on query. Default database: ''. Query: 'CREATE USER 'msg_mycat'@'192.168.20.%' IDENTIFIED WITH 'mysql_native_password' AS '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK', Error_code: 1396
错误标号: Error_code: 1396
网上百度了一大圈后,都没有解决我的问题,但这里还是把网上的方法给罗列一遍,可能每个人遇到的情况不一样:
第一种情况:用户已存在,所以报错
查询mysql所有用户命令:
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
第二种情况:用户存在,但是没有权限
查询具体用户权限命令
show grants for 'msg_mycat'@'192.168.20.%';
赋权给用户
grant select,update,insert,delete on *.* to 'msg_mycat'@'192.168.20.%';
至于针对上面两种情况有的人说把用户直接删除 在创建然后赋权就没问题了,但是我试了还是不行。这里也贴出创建用户命令
create user 'msg_repl'@'192.168.20.%' identified by '123456';
第三种情况:也就是我遇到的情况,我是直接更改了主从同步的位置,从主中最新的位置开始同步,然后就可以了
1.查看主节点binlog以及log_position
show master status;
2.从节点重新定位同步位置,并启动同步
change master to master_host='192.168.20.207',master_user='msg_repl',master_password='123456',master_log_file='mysql-bin.000002',MASTER_LOG_POS=153;
start slave;
master_host为主节点IP
master_user为同步用户账号
master_password为账户密码
master_log_file为主节点binlog日志名称
MASTER_LOG_POS为同步数据位置(参考第一步show master status的结果)
重新定向后,重启节点同步,正常启动。