MemSQL主节点未运行且重启失败(报1045权限错误)求助
解决MemSQL主节点重启时的1045访问拒绝问题
我来帮你拆解下你遇到的问题,先理清楚两个关键点:为什么主节点没运行集群还能读写,以及重启时的访问拒绝错误怎么解决。
为什么主节点未运行但集群仍可读写?
MemSQL的架构里,叶子节点(Leaf Nodes)是负责实际数据存储和执行读写查询的核心,而主聚合器(主节点)主要承担查询协调、元数据管理、集群配置同步的工作。如果你的应用是直接连接叶子节点进行读写,或者集群的元数据暂时还没感知到主节点离线,叶子节点之间依然可以协同处理分布式查询,所以集群能正常工作。不过这种状态长期来看是有风险的,比如无法做集群配置变更、元数据更新,得尽快修复主节点。
重启主节点时的1045错误解决步骤
报错信息Access denied for user 'root'@'xx.xx.xx.xx' (using password: NO)说明:主节点重启后,尝试用无密码的root用户连接集群内的其他节点(比如叶子节点),但目标节点的root用户要求密码验证,或者不允许主节点的IP访问。
步骤1:检查叶子节点的root用户权限
登录每个叶子节点,用MemSQL Shell或MySQL客户端执行以下SQL,查看root用户的授权情况:
SELECT user, host, authentication_string FROM mysql.user WHERE user = 'root';
重点看两个点:
- 有没有针对主节点IP(
xx.xx.xx.xx)的root授权记录? - 对应的
authentication_string是否为空(无密码)?如果不为空,说明该叶子节点的root设置了密码。
步骤2:统一节点间的认证方式
有两种处理方式,推荐第一种更安全的方案:
方式一:给主节点配置正确的连接密码
- 先在主节点上设置root密码(如果还没设置):
SET PASSWORD FOR 'root'@'%' = PASSWORD('你的密码'); FLUSH PRIVILEGES;
- 修改主节点的MemSQL启动配置,让它重启时用这个密码连接集群节点:
- 找到主节点的
memsql.cnf配置文件(通常在/var/lib/memsql/<node-id>/目录下) - 添加或修改参数:
password = '你的密码' - 保存后重启主节点
- 找到主节点的
方式二:给主节点IP授权无密码访问(不推荐,安全性低)
如果暂时不想设置密码,可以在每个叶子节点上执行,允许主节点IP的root无密码访问:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'xx.xx.xx.xx' IDENTIFIED BY '' WITH GRANT OPTION; FLUSH PRIVILEGES;
步骤3:修复主节点的集群状态
如果主节点虽然离线但仍在集群列表中,可能需要先移除再重新加入:
- 用正常运行的节点(比如任意叶子)执行命令移除主节点:
memsql-ops cluster remove-node --node-id BD60BED7C8082966F375CBF983A46A9E39FAA791
- 重启主节点后,重新将它加入集群:
memsql-ops cluster add-aggregator --host xx.xx.xx.xx --password '你的密码'
按照这些步骤操作,应该就能解决重启主节点时的访问拒绝问题了。如果遇到其他细节问题,可以补充节点的版本、配置文件内容等信息。
内容的提问来源于stack exchange,提问作者Mukundan




