mysql复制错误: Candidate slave is missing replication user

标签 mysql replication

上下文: 我正在尝试设置 mysql 复制,一主一从。我在 mysql 5.6 中使用新的 GTID 方法,以及用于自动故障转移的 mysql 实用程序。

我能够设置主节点 M 和从节点 S 的复制。

我试图运行一个简单的脚本来向自己展示一切都设置正确。脚本如下:

  1. 设置复制,节点 M 作为主节点,节点 S 作为从节点
  2. 确保对 M 中的表所做的更改反射(reflect)在 S 中
  3. 关闭 M 并确保 S 接管作为新的 master
  4. 对 S 进行一些表更改
  5. 启动 M 并将其作为从属设备添加回集群
  6. 确保 M 的更新 catch S
  7. 让 M 再次成为主节点

直到最后一步,我的脚本似乎都是成功的。 很大程度上,我遵循此处的步骤: http://www.clusterdb.com/mysql/replication-and-auto-failover-made-easy-with-mysql-utilities

但是当我运行“mysqlrpladmin --master=root@S_NODE --new-master=root@M_NODE --demote-master --discover-slaves-login=root switchover”时,出现以下错误:

# Discovering slaves for master at S_NODE
# Discovering slave at M_NODE
# Found slave: M_NODE
# Checking privileges.
# Performing switchover from master at S_NODE to slave at M_NODE
# Checking candidate slave prerequisites.
Candidate slave is missing replication user.
ERROR: Candidate slave is missing replication user.
# Errors found. Switchover aborted.
#
# Replication Topology Health:
+-----------------+-------+---------+--------+------------+---------+
| host            | port  | role    | state  | gtid_mode  | health  |
+-----------------+-------+---------+--------+------------+---------+ 
| S_NODE          | 3306  | MASTER  | UP     | ON         | OK      |
| M_NODE          | 3306  | SLAVE   | UP     | ON         | OK      |
+-----------------+-------+---------+--------+------------+---------+

我似乎找不到与该错误消息“候选从属缺少复制用户”相关的任何 google 或 stackoverflow 页面。

我相信我在节点 S 和 M 上都有一个复制用户,因为它们在我的测试脚本中一度充当从属服务器。

有什么想法吗?

最佳答案

我在一些新集群上测试故障转移时遇到了同样的问题,并注意到按照您的建议添加 --force 标志后,切换成功完成创建用户“replication_user”@“S_NODE”,而我没有任何提示。

然后我想到我设置的复制用户是“repl”@“specific_subnet_%” - 这与脚本正在寻找的内容(“repl”@“S_NODE”)不匹配,因此预-如果没有 --force,检查失败。

我正在测试另一个集群,因此为了验证我执行了以下操作:

  • 在没有 --force 的情况下运行 mysqlrpladmin ... switchover 命令(如预期失败)
  • 使用相同的授权 (REPLICATION SLAVE) 创建了 'replication_user'@'S_NODE''replication_user'@'M_NODE',并且密码作为我现有的replication_user。如果您希望能够使用此脚本在 S_NODE 和 M_NODE 主机之间来回失败,则需要同时使用 S_NODE 和 M_NODE 主机。
  • 在没有 --force 的情况下再次尝试 mysqlrpladmin ... switchover

这次真是太神奇了!

故事的寓意:脚本期望 'replication_user'@'new_master' 用户存在。 --force 标志将为您创建该用户,并且在您第一次使用它后就不再需要了。

关于mysql复制错误: Candidate slave is missing replication user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20985507/

相关文章:

mysql - 使用 mysql.connection 根据其他两列中的值返回行 ID

php - 如何通过连接来逃避 Select 查询中 Medoo 表前缀的默认行为

java - 如何删除 spring-data-jpa 中多边的项目?

mysql - 在mysql多源复制中,replicate-rewrite-db不起作用

solr - Solr 复制和 Solr 云有什么区别?

mysql复制需要有两台master服务器

database - Firebird 数据库复制

mysql - Rails ActiveRecord - 选择评论最多的用户

c# - 设置 PublicationMonitor.ConnectionContext 会引发 NullReferenceException

Mysql查询获取一个表的行作为另一个表的列,列名来自第三个表