gpt4 book ai didi

google-cloud-platform - GCP ProxySQL 和 BasicDataSource 连接池

转载 作者:行者123 更新时间:2023-12-04 16:45:55 25 4
gpt4 key购买 nike

我有一个 java BasicDataSource 连接池的问题。

我的 ProxySql 在我所有的 DataProc 计算引擎上都正确配置,如果我尝试使用 sqlclient 连接到我的 CloudSql 实例,它会正常工作。当我尝试从我的连接池连接到我的 CloudSql 时,配置了以下连接字符串:pooljdbc:mysql://127.0.0.1/my_db?serverTimezone=UTC,我收到此错误:

Cannot create PoolableConnectionFactory (Access denied for user 'myuser'@'localhost' (using password: YES))
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'myuser'@'localhost' (using password: YES))
at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)

并且是正确的,因为 proxySQL tcp 连接是在 127.0.0.1 上而不是在本地主机(unix 套接字)上。

我不明白为什么 BasicDataSource 尝试连接到本地主机,而不是我在连接字符串中配置的 127.0.0.1。

非常感谢任何帮助。

最佳答案

字符串 'myuser'@'localhost' 是指您的登录身份,而不是服务器连接字符串;例如,如果您从名为 foo-instance 的机器上运行连接尝试,即使您使用指定远程 IP 地址的连接字符串,您的登录名也将是 'myuser'@'foo -实例'。虽然使用 sqlclient 的直接连接将根据指定的服务器主机名以不同方式解析源主机名,但这是一个不应该依赖的怪癖。特别是,在您的情况下,ProxySQL 服务将代表您行事,因此源主机名将来自 ProxySQL 实例,而不是您的连接字符串。

您可能想分享有关 ProxySQL 配置的更多详细信息,但如果您使用默认设置,您的 PROXYSQL_HOSTNAME 将设置为 localhost;您可以尝试确保将 PROXYSQL_HOSTNAME 设置为 127.0.0.1

有趣的是,根据粗略的测试,创建由 127.0.0.1 标识的用户授权似乎对登录主机有更多限制,而为 localhost 创建授权允许 127.0.0.1localhost 用于连接主机名:

MariaDB [(none)]> create user 'dhuo'@'127.0.0.1' identified by 'dhuopass';
...
$ mysql -h localhost -pdhuopass
ERROR 1045 (28000): Access denied for user 'dhuo'@'localhost' (using password: YES)
$ mysql -h 127.0.0.1 -pdhuopass
Welcome to the MariaDB monitor. Commands end with ; or \g.
...
MariaDB [(none)]> drop user dhuo@127.0.0.1
MariaDB [(none)]> create user 'dhuo'@'localhost' identified by 'dhuopass';
...
$ mysql -h localhost -pdhuopass
Welcome to the MariaDB monitor. Commands end with ; or \g.
$ mysql -h 127.0.0.1 -pdhuopass
Welcome to the MariaDB monitor. Commands end with ; or \g.

通常,最好将您的用户授权配置为识别为来自 localhost 而不是 127.0.0.1 以获得支持入站的最佳机会主机名。

关于google-cloud-platform - GCP ProxySQL 和 BasicDataSource 连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56236132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com