上下文: 我正在尝试使用一个主服务器和一个服务器来设置mysql复制。我在mysql 5.6中使用了新的GTID方法,以及用于自动故障转移的mysql实用程序。
我可以使用主节点M和从节点S设置复制。
我正在尝试运行一个简单的脚本来向自己展示所有内容都已正确设置。脚本如下:
我的脚本看起来很成功,直到最后一步。 很大程度上,我遵循这里的步骤: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页面“Candidate slave缺少复制用户。”
我相信我在节点S和M上都有一个复制用户,因为它们在我的测试脚本中的某一点充当了奴隶。
有什么想法?
答案 0 :(得分:1)
我在测试某些新群集上的故障转移时遇到了同样的问题,并注意到在您按照建议添加--force
标志后,切换成功完成并创建了用户'replication_user' @'S_NODE'没有任何提示我。
然后我发现我设置的复制用户是'repl'@'specific_subnet_%' - 这与脚本所寻找的不匹配('repl'@'S_NODE'),所以预先没有--force
检查失败。
我有另一个我正在测试的集群,所以为了验证我做了以下事情:
mysqlrpladmin ... switchover
命令而没有--force
(它按预期失败)'replication_user'@'S_NODE'
)和密码创建了'replication_user'@'M_NODE'
和REPLICATION SLAVE
。如果您希望能够使用此脚本在它们之间来回故障,则需要S_NODE和M_NODE主机。mysqlrpladmin ... switchover
--force
这次它的魅力就像一个魅力!
故事的道德:脚本期望'replication_user'@'new_master'
用户存在。 --force
标志将为您创建该用户,并且在您第一次使用它之后不需要。
答案 1 :(得分:0)
出于某种原因,添加“--force”标志可以解决问题。上述评论中的更多细节。 如果有人知道为什么会这样,请发表评论。