我有一个简单的主从设置,使用 MySQL 5.6,每当我对 mysql.user 表进行更改时,它都会失败。主服务器设置为复制两个数据库,但都不是 mysql 数据库。binlog_format 设置为 ROW。
我在主服务器上设置了多个 MySQL 用户,以供各个同事对数据库进行更改,但在从服务器上我只有一个用户,即 Web 服务器。
当我尝试从主服务器删除冗余用户时,从服务器失败并显示以下消息:
Error 'Operation DROP USER failed for 'mysql_user'@'localhost'' on query. Default database: ''. Query: 'DROP USER 'mysql_user'@'localhost''
我不想一直跳过错误,因为我会不时更改 mysql.user 表,而且很容易忘记检查复制是否仍在进行。我没有为复制设置任何监控,所以有几次我对 mysql 表进行了更改,几个小时内没有人注意到,这影响了我们的生产 Web 服务器。
任何帮助都非常感谢。
答案1
请注意错误信息的部分:'mysql_user'@'localhost''
后面有两句引言本地主机字。当此语句复制时,从属数据库服务器无法找到用户,复制停止。MySQL 5.7 有DROP USER IF EXISTS user
表格,但在 MySQL 5.6 中,您最好不要犯这样的错误,或者直接编辑 mysql 数据库。
更新:如果你不想将 MySQL 账户从主服务器复制到从服务器,你可能希望在replicate-ignore-db=mysql
每个服务器上的 [mysqld] 部分中添加奴隶。我更喜欢在从服务器进行过滤,因为主服务器的二进制日志中的更改对于将来的故障排除具有潜在价值。