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

ProxySQL转发连接时用户MySQL认证失败问题求助

问题原因分析及解决办法

核心原因

这个问题的本质是ProxySQL的用户配置未正确映射后端MySQL用户,同时可能伴随MySQL 8.0认证协议的兼容性问题:

  1. ProxySQL作为中间层,需要同时配置「前端用户(供外部客户端连接ProxySQL)」和「后端用户(ProxySQL用来连接MySQL)」,如果只在MySQL中创建了ravi用户,但未在ProxySQL内部完成用户映射,ProxySQL无法正确转发认证请求。
  2. MySQL 8.0默认使用caching_sha2_password认证插件,ProxySQL 2.2.4对该插件的支持不完善,会导致ProxySQL连接MySQL时认证失败。

另外,虽然容器内部直接连接MySQL成功,但这是因为直接使用MySQL的用户认证,跳过了ProxySQL的中间转发逻辑,和外部通过ProxySQL连接的认证路径完全不同。


解决步骤

1. 配置ProxySQL前端用户映射

进入ProxySQL Admin控制台,检查并添加ravi用户:

-- 查看现有用户配置
SELECT username, active, default_hostgroup FROM mysql_users;

-- 如果ravi不存在,添加用户映射(backend=1表示该用户用于后端连接)
INSERT INTO mysql_users (username, password, active, default_hostgroup, backend) 
VALUES ('ravi', 'ravi123', 1, 1, 1);

-- 加载配置到运行时并持久化
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

2. 适配MySQL 8.0的认证协议

进入MySQL容器,修改ravi用户的认证插件为ProxySQL兼容的mysql_native_password:

-- 修改用户认证方式
ALTER USER 'ravi'@'%' IDENTIFIED WITH mysql_native_password BY 'ravi123';

-- 刷新权限
FLUSH PRIVILEGES;

同时确保ravi用户允许从任意来源连接(包括ProxySQL容器的IP):

GRANT ALL PRIVILEGES ON *.* TO 'ravi'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3. 验证ProxySQL后端连接状态

在ProxySQL Admin中确认后端MySQL服务器状态正常:

SELECT hostgroup_id, hostname, port, status FROM mysql_servers;

确保主机组ID与mysql_users中default_hostgroup的值一致,且服务器状态为ONLINE。

4. 重新测试外部连接

执行原命令再次测试:

sudo mysql -u ravi -pravi123 -h 0.0.0.0 -P16033 -e "SELECT @@port"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:40:48