上下文: 我正在尝试设置 mysql 复制,一主一从。我在 mysql 5.6 中使用新的 GTID 方法,以及用于自动故障转移的 mysql 实用程序。
我能够设置主节点 M 和从节点 S 的复制。
我试图运行一个简单的脚本来向自己展示一切都设置正确。脚本如下:
- 设置复制,节点 M 作为主节点,节点 S 作为从节点
- 确保对 M 中的表所做的更改反射(reflect)在 S 中
- 关闭 M 并确保 S 接管作为新的 master
- 对 S 进行一些表更改
- 启动 M 并将其作为从属设备添加回集群
- 确保 M 的更新 catch S
- 让 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/