当尝试获取psqlshell(不使用iam用户(时,我收到的是:
> gcloud alpha sql connect pg-instance --database mydb --user myuser --project my-project
Starting Cloud SQL Proxy: [/Users/me/google-cloud-sdk/bin/cloud_sql_proxy -instances my-project:us-central1:pg-instance=tcp:9470 -credential_file /Users/me/.config/gcloud/legacy_credentials/me@me.com/adc.json]]
2022/03/15 14:47:59 Rlimits for file descriptors set to {Current = 8500, Max = 9223372036854775807}
2022/03/15 14:47:59 using credential file for authentication; path="/Users/me/.config/gcloud/legacy_credentials/me@me.com/adc.json"
2022/03/15 14:48:00 Listening on 127.0.0.1:9470 for my-project:us-central1:pg-instance
2022/03/15 14:48:00 Ready for new connections
Connecting to database with SQL user [myuser].Password:
psql: error: connection to server at "127.0.0.1", port 9470 failed: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
我在使用服务帐户连接到Postgres(Cloud Sql(时收到了相同的错误消息。在我的设置中,我确实在docker容器中运行了cloud_sql_proxy。
为了使它发挥作用,我不得不添加步骤#9中定义的额外配置https://cloud.google.com/sql/docs/sqlserver/connect-docker#connect-客户端
docker run -d
-v <PATH_TO_KEY_FILE>:/config
-p 127.0.0.1:5432:5432
gcr.io/cloudsql-docker/gce-proxy:1.33.1 /cloud_sql_proxy
-instances=<INSTANCE_CONNECTION_NAME>=tcp:0.0.0.0:5432 -credential_file=/config
缺少的位是:端口映射上的主机ip和0.0.0.0:在cloud_sql_proxy命令中
我想指出几点。对我来说,最好的起点是"关于连接选项"页面;概述和开始前部分都非常有助于全面了解流程以及如何正确配置用户。但最重要的部分是连接选项,对于消息connection to server at "127.0.0.1"
,我猜它是一个私有IP,但在开始调试之前,请确保涵盖了这一部分。
在您的情况下,日志显示与服务器的连接出现错误…我使用了包括"诊断问题"链接的"疑难解答"指南来访问"调试连接问题"页面,该页面包含许多关于如何调试任何连接问题的有用信息。
通常,连接问题属于以下三个领域之一:
- 正在连接-您能够通过网络访问您的实例吗
- 授权-您是否被授权连接到实例
- 身份验证-数据库是否接受您的数据库凭据
每一个都可以进一步细分为不同的调查路径。
确定连接方法后,会有不同的问题帮助您了解可能的故障排除路径。
如果使用这些指南无法为您提供解决方案,请确保使用结果、步骤和所遵循的信息更新您的答案,以提供进一步的帮助。这将是一个很好的例子,因为它有相同的日志错误,而另一个问题表明,对于这个特定的日志消息,有一些不同的故障排除路径,此外,它们还为您提供了有用的信息。