这是当我尝试使用 Cloud SQL 代理在 Windows 中配置对 Google Cloud SQL 的访问时出现的错误 - “listen tcp 127.0.0.1:3306:bind: An attempts was made to access a socket in a way obliged by它的访问权限。”
这是我正在使用的命令的格式“cloud_sql_proxy.exe -dir=/cloudsql -instances=my-project:us-central1:sql-instance=tcp:3306 mysql -u --主机 “ - 如文档中所述。
有人可以让我知道到底是什么原因造成的吗?
SQL Server 在本地使用 3306 端口。因此,您无法在它运行时绑定它。 停止 SQL Server 以将 CloudSQL 代理绑定到它。
Windows 10 的情况:转到任务管理器 -> 服务 -> MySQL57
右键单击并停止该任务。完成后尝试再次运行相同的命令。它会工作并显示为输出
Listening on 127.0.0.1:3306 for <instance-name>
听起来另一个进程已经在使用 3306。您可以尝试指定不同的端口吗?例如
-instances=my-project:us-central1:sql-instance=tcp:3307
根据 google 文档 在 Windows cmd 或 google sdk shell 上使用此命令
cloud_sql_proxy.cmd -instances=<INSTANCE_CONNECTION_NAME>=tcp:3306 -credential_file=<PATH_TO_KEY_FILE>
(确保将 cloud_sql_proxy.cmd 声明为环境变量)在您的情况下
my-project:us-central1:sql-instance
如果这不起作用,请尝试将 tcp 连接到 3307,如上面的帖子中所述。
我的情况是,我使用的 docker 映像与本地计算机上安装的相同端口相同,因此本地 mysql 不允许访问该端口,因为该端口已被使用并正在运行。我卸载了本地 mysql。现在它工作正常
您需要 sql cloud 的令牌 你在这里生成令牌 谷歌服务令牌生成器 然后获取它将生成的令牌并将其放在这里,而 INSTANCE_CONNECTION_NAME 可以从谷歌云控制台中的 sql 实例概述页面获取
cloud_sql_proxy -token=ACCESS_TOKEN
-instances=INSTANCE_CONNECTION_NAME=tcp:PORT_NUMBER
请参阅文档了解更多详细信息 sql proxy auth 更多连接方式
对我来说它解决了 400 bad request 问题
Response: {
"error": "invalid_grant",
"error_description": "Bad Request"
}
注意 - 如果您使用这种方式连接,您必须在 sql 实例配置页面中允许不安全连接
转到任务管理器 -> 服务 -> MySQL57 停止你的 Mysql 或 Postgres 实例,然后重试。它应该可以工作。