You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过MaxScale连接应用:仅MaxScale用户可访问Galera集群

解决MaxScale仅允许指定用户连接Galera集群的问题

我来帮你搞定这个问题!你现在遇到的情况是只有maxscale用户能通过MaxScale的4006端口连接集群,其他应用用户(比如myuser)连不上,但直接连Galera节点没问题——这大概率是MaxScale的服务配置限制了用户访问,咱们一步步排查解决:

1. 检查MaxScale服务的核心配置(最常见的问题点)

打开你的maxscale.cnf,找到对应的服务配置段(比如[ReadWriteSplit]或者你定义的读写/只读服务),重点看两个参数:

  • 不要设置user=maxscale:如果这个参数存在,MaxScale会强制用maxscale用户去连接后端Galera节点,不管前端用什么用户登录,自然其他用户会触发权限拒绝。直接删掉这一行!
  • 确保开启auth_all_servers=1:这个参数让MaxScale验证用户在所有后端Galera节点的权限,避免因为某节点权限不一致导致认证失败。

修改后的服务配置示例:

[ReadWriteSplit]
type=service
router=readwritesplit
servers=galera_node1,galera_node2,galera_node3
auth_all_servers=1
# 移除 user=maxscale 这一行

2. 确认应用用户在所有Galera节点的权限一致性

虽然你说myuser直接连Galera没问题,但要确保:

  • myuser在所有3个Galera节点上都存在,并且拥有从MaxScale节点IP访问的权限(或者允许任意IP,用@'%')。执行以下SQL在任意一个节点(利用Galera同步特性会同步到其他节点):
GRANT ALL ON *.* TO 'myuser'@'maxscale_node_ip' IDENTIFIED BY 'your_password';
-- 或者允许任意IP访问:
-- GRANT ALL ON *.* TO 'myuser'@'%' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
  • 验证权限同步:在每个节点执行SELECT user, host FROM mysql.user WHERE user='myuser';,确保结果完全一致。

3. 刷新MaxScale的用户缓存并重启服务

修改配置后,需要让MaxScale重新加载用户信息:

# 刷新用户缓存
maxadmin reload users
# 重启MaxScale服务
systemctl restart maxscale

4. 查看MaxScale日志定位具体错误

如果还是不行,去MaxScale的日志目录(默认/var/log/maxscale/)查看maxscale.log,当myuser连接失败时,日志里会给出具体原因——比如某个节点没有myuser、权限不足,或者MaxScale的认证模式不兼容。

5. 验证监听器配置正确性

检查监听器配置段,确保它关联的是你修改后的服务(而不是MaxScale的admin服务),比如:

[Listener]
type=listener
service=ReadWriteSplit
protocol=MySQLClient
port=4006

完成以上步骤后,再用myuser测试连接:

mysql -h maxscale_ip -P 4006 -u myuser -p

这样应该就能让任意应用用户通过MaxScale连接Galera集群了!

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:03:51