【发布时间】:2023-02-07 23:26:07
【问题描述】:
我有一个用于 ProxySQL 2.2.4 的容器和另一个用于 MySQL 8.0.31 的容器。两个容器都使用相同的网络名称。因此,我可以从 ProxySQL 容器访问在另一个容器中运行的 MySQL。
甚至,ProxySQL Admin 可以将 MySQL 服务显示为 ONLINE,并且 Admin 中的 ping/connect 没有错误。
ProxySQL 管理员>
select hostgroup,srv_port,status from stats_mysql_connection_pool;
| hostgroup | srv_port | status |
|---|---|---|
| 1 | 3306 | ONLINE |
| 1 | 3306 | ONLINE |
现在,当我从 ProxySQL 容器外部尝试运行以下命令以通过 proxySQL 访问 MySQL 服务时,它失败了。
注意:mysql 和 proxysql 端都存在用户“ravi”,密码相同。
$ sudo mysql -u ravi -pravi123 -h 0.0.0.0 -P16033 -e "SELECT @@port"
Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000) at line 1: Access denied for user 'ravi'@'172.18.0.2' (using password: YES)
容器中的 ProxySQL 日志显示:
2022-11-12 08:31:24 mysql_connection.cpp:1063:handler(): [错误] 1:mysql:3306 上的 mysql_real_connect() 失败,FD(Conn:42,MyDS:42),1045:访问被拒绝对于用户'ravi'@'172.18.0.2'(使用密码:YES)。
同一用户使用相同的密码从 ProxySQL 容器 shell 连接。
$ sudo docker exec -it proxysql bash
root@34c06973094d:/# mysql -u ravi -p -h mysql 输入密码: 欢迎使用 MariaDB 监视器。命令以 ; 结尾或\g。 您的 MySQL 连接 ID 是 4352 服务器版本:8.0.31 MySQL Community Server - GPL
版权所有 (c) 2000、2018、Oracle、MariaDB Corporation Ab 等。
输入“帮助;”或 '\h' 寻求帮助。输入'\c'清除当前输入语句。
MySQL [(无)]>
它背后的错误是什么?为什么 ProxySQL 不能对用户进行身份验证,而同一用户却能够从 shell 登录到 MySQL。
预期:用户应该能够使用 ProxySQL 运行 SQL 查询,ProxySQL 已经连接并且正在被监视,而不会出现连接和监视错误。
【问题讨论】:
-
你的容器配置是什么?
-
我有一个类似的设置,似乎你没有将用户
ravi添加到代理 sql 中。 proxysql 和 mysql 不共享相同的用户帐户。您需要在两者中创建帐户才能获得访问权限。或者我可能对文档感到困惑。但这就是我让它工作的方式