无法为 CloudSQL 获取 jdbcUrl=jdbc:postgresql:///<dbname> 错误的驱动程序实例
Failed to get driver instance for jdbcUrl=jdbc:postgresql:///<dbname> error for CloudSQL
我正在尝试从我的本地计算机连接到我的 GCP 项目 PostgreSQL CloudSQL 实例。 PostgreSQL 没有 public IP,只有私有 IP。
Properties connProps = new Properties();
connProps.setProperty("user", "XXX-compute@developer.gserviceaccount.com");
connProps.setProperty("password", "password");
connProps.setProperty("sslmode", "disable");
connProps.setProperty("socketFactory", "com.google.cloud.sql.postgres.SocketFactory");
connProps.setProperty("cloudSqlInstance", "coral-XXX-XXXX:us-central1:mdm");
connProps.setProperty("enableIamAuth", "true");
HikariConfig config = new HikariConfig();
config.setJdbcUrl(jdbcURL);
config.setDataSourceProperties(connProps);
config.setConnectionTimeout(10000); // 10s
HikariDataSource connectionPool = new HikariDataSource(config);
我收到以下错误
Failed to get driver instance for jdbcUrl=jdbc:postgresql:///mdm
java.sql.SQLException: No suitable driver
我已验证我的用户名、实例名、IAM 连接都工作正常。我使用的 IAM 服务帐户是我的计算引擎的默认服务帐户。
我应该能够从我的本地机器连接到这个 PostgreSQL 实例吗?
虽然从安全角度来看,仅启用私有 IP 并从云 SQL 实例中删除 public IP 是一种很好的做法,但仍需牢记一些注意事项在考虑连通性时。
云 SQL 实例只启用了私有 IP,您无法直接从本地机器连接到它,无论是使用私有 IP 还是使用云 SQL代理。
现在,在你的情况下,正如你提到的,你在云 SQL 实例中只启用了私有 IP,这似乎是你收到错误的原因。
减轻错误-
如果可以的话,我会推荐你provision a public IP address
对于 Cloud SQL 实例,然后尝试正确连接它
指定 jdbc URL 如前所述 here,看起来像这样 -
jdbc:postgresql:///<DATABASE_NAME>?cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=<POSTGRESQL_USER_NAME>&password=<POSTGRESQL_USER_PASSWORD>
否则,如果您不想提供 public IP 地址,可以
从您可以使用的外部资源建立连接
云 VPN 隧道或 VLAN 连接(如果您有专用网络)
here.
中提到的互连或合作伙伴互连
如果您没有专用互连或合作伙伴互连,并且您只想使用私有 IP 连接到云 SQL,您可以通过 Compute Engine VM 实例启用端口转发.这是分两步完成的 -
- 通过私有 IP 将计算引擎连接到云 SQL 实例。
- 将本地计算机数据库连接请求转发到计算引擎以通过云 SQL 代理隧道到达云 SQL 实例。 youtube video 描述了如何做到这一点。
要获得上述内容的详细说明,您可以查看 this article。
首先,确保您正确配置 JDBC URL。
URL 应该是这样的:
jdbc:postgresql:///<DATABASE_NAME>?cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=<POSTGRESQL_USER_NAME>&password=<POSTGRESQL_USER_PASSWORD>
详情见docs。
其次,如果您的 Cloud SQL 实例仅为私有 IP,则您的本地计算机将没有指向它的网络路径,除非您已明确配置一个(请参阅 this answer 了解选项).
通常,连接到私有 IP 实例的最简单方法是 运行 与实例位于同一 VPC 中的 VM,并从该 VM 连接。
我正在尝试从我的本地计算机连接到我的 GCP 项目 PostgreSQL CloudSQL 实例。 PostgreSQL 没有 public IP,只有私有 IP。
Properties connProps = new Properties();
connProps.setProperty("user", "XXX-compute@developer.gserviceaccount.com");
connProps.setProperty("password", "password");
connProps.setProperty("sslmode", "disable");
connProps.setProperty("socketFactory", "com.google.cloud.sql.postgres.SocketFactory");
connProps.setProperty("cloudSqlInstance", "coral-XXX-XXXX:us-central1:mdm");
connProps.setProperty("enableIamAuth", "true");
HikariConfig config = new HikariConfig();
config.setJdbcUrl(jdbcURL);
config.setDataSourceProperties(connProps);
config.setConnectionTimeout(10000); // 10s
HikariDataSource connectionPool = new HikariDataSource(config);
我收到以下错误
Failed to get driver instance for jdbcUrl=jdbc:postgresql:///mdm
java.sql.SQLException: No suitable driver
我已验证我的用户名、实例名、IAM 连接都工作正常。我使用的 IAM 服务帐户是我的计算引擎的默认服务帐户。
我应该能够从我的本地机器连接到这个 PostgreSQL 实例吗?
虽然从安全角度来看,仅启用私有 IP 并从云 SQL 实例中删除 public IP 是一种很好的做法,但仍需牢记一些注意事项在考虑连通性时。
云 SQL 实例只启用了私有 IP,您无法直接从本地机器连接到它,无论是使用私有 IP 还是使用云 SQL代理。
现在,在你的情况下,正如你提到的,你在云 SQL 实例中只启用了私有 IP,这似乎是你收到错误的原因。
减轻错误-
如果可以的话,我会推荐你provision a public IP address 对于 Cloud SQL 实例,然后尝试正确连接它 指定 jdbc URL 如前所述 here,看起来像这样 -
jdbc:postgresql:///<DATABASE_NAME>?cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=<POSTGRESQL_USER_NAME>&password=<POSTGRESQL_USER_PASSWORD>
否则,如果您不想提供 public IP 地址,可以 从您可以使用的外部资源建立连接 云 VPN 隧道或 VLAN 连接(如果您有专用网络) here.
中提到的互连或合作伙伴互连如果您没有专用互连或合作伙伴互连,并且您只想使用私有 IP 连接到云 SQL,您可以通过 Compute Engine VM 实例启用端口转发.这是分两步完成的 -
- 通过私有 IP 将计算引擎连接到云 SQL 实例。
- 将本地计算机数据库连接请求转发到计算引擎以通过云 SQL 代理隧道到达云 SQL 实例。 youtube video 描述了如何做到这一点。
要获得上述内容的详细说明,您可以查看 this article。
首先,确保您正确配置 JDBC URL。
URL 应该是这样的:
jdbc:postgresql:///<DATABASE_NAME>?cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.postgres.SocketFactory&user=<POSTGRESQL_USER_NAME>&password=<POSTGRESQL_USER_PASSWORD>
详情见docs。
其次,如果您的 Cloud SQL 实例仅为私有 IP,则您的本地计算机将没有指向它的网络路径,除非您已明确配置一个(请参阅 this answer 了解选项).
通常,连接到私有 IP 实例的最简单方法是 运行 与实例位于同一 VPC 中的 VM,并从该 VM 连接。