You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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:统一节点间的认证方式

有两种处理方式,推荐第一种更安全的方案:

方式一:给主节点配置正确的连接密码

  1. 先在主节点上设置root密码(如果还没设置):
SET PASSWORD FOR 'root'@'%' = PASSWORD('你的密码');
FLUSH PRIVILEGES;
  1. 修改主节点的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:修复主节点的集群状态

如果主节点虽然离线但仍在集群列表中,可能需要先移除再重新加入:

  1. 用正常运行的节点(比如任意叶子)执行命令移除主节点:
memsql-ops cluster remove-node --node-id BD60BED7C8082966F375CBF983A46A9E39FAA791
  1. 重启主节点后,重新将它加入集群:
memsql-ops cluster add-aggregator --host xx.xx.xx.xx --password '你的密码'

按照这些步骤操作,应该就能解决重启主节点时的访问拒绝问题了。如果遇到其他细节问题,可以补充节点的版本、配置文件内容等信息。

内容的提问来源于stack exchange,提问作者Mukundan

火山引擎 最新活动