云SQL代理错误 - 尝试访问的套接字被其访问权限所禁止

14
这是我在尝试使用Cloud SQL Proxy配置访问Google Cloud SQL时遇到的错误,出现了"listen tcp 127.0.0.1:3306: bind: An attempt was made to access a socket in a way forbidden by its access permissions."。
我使用的命令格式如下: "cloud_sql_proxy.exe -dir=/cloudsql -instances=my-project:us-central1:sql-instance=tcp:3306 mysql -u --host",如文档所述。
请问有人能告诉我实际上是什么原因导致了这个问题?
7个回答

30

SQL Server在本地使用3306端口,因此在其运行时无法绑定。停止SQL Server以将CloudSQL代理绑定到它。

如果是Windows 10:转到任务管理器->服务->MySQL57

右键单击并停止该任务。完成后,请尝试再次运行相同的命令。它将正常工作并显示为输出。

Listening on 127.0.0.1:3306 for <instance-name>

2
五年过去了,它仍然像魔法一样运行良好。谢谢,Maverick! - Rene
2
拯救了我的生命,如果有人使用PostgreSQL,则相同的过程适用于PostgreSQL进程。 - Kevin Kreps
对我不起作用。 - Julius Goddard
使用Postgres部署到应用引擎,并尝试通过Cloud SQL代理进行本地连接以进行开发时,遇到了相同的问题,如上所述,对于Postgres也起作用!要关闭的服务描述为= postgresql-x64-15。祝好运! - Yev Guyduy

17

听起来好像另一个进程已经在使用3306端口。你能否尝试指定一个不同的端口?例如:-instances=my-project:us-central1:sql-instance=tcp:3307


抱歉之前的评论不起作用了。我遇到了这个错误 - “ERROR 2003 (HY000): Can't connect to MySQL server on 'ip-addr' (10060)”。 - opensourced101
这是我在Windows命令提示符上运行Cloud SQL代理时得到的结果 - <br/> 2016/03/19 13:55:52 监听实例:"my-project:us-central1:sql-instance=tcp:3307" <br/> 2016/03/19 13:55:52 在"localhost:3307"上打开套接字,用于"my-project:us-central1:sql-instance" <br/> 2016/03/19 13:55:52 套接字前缀:c:\cloudsql <br/>光标一直在闪烁... - opensourced101
你使用的是哪个版本的Windows?你是使用网站上预编译的代理版本还是自己构建的版本? - Vadim
1
操作系统 - Windows 7 64位。我正在使用预编译的64位版本。 - opensourced101

1
根据google docs,在Windows命令提示符或Google SDK shell上使用以下命令:cloud_sql_proxy.cmd -instances=<INSTANCE_CONNECTION_NAME>=tcp:3306 -credential_file=<PATH_TO_KEY_FILE>(确保将cloud_sql_proxy.cmd声明为环境变量),其中在您的情况下:
  • INSTANCE_CONNECTION_NAME = my-project:us-central1:sql-instance
  • PATH_TO_KEY_FILE = 在IAM面板中创建一个服务帐户并保存JSON文件,复制其路径并在此处粘贴。
如果这不起作用,请尝试连接到3307的TCP,如上述帖子所述。

0

您需要一个令牌来连接 SQL 云端数据库,您可以在此处生成令牌 Google 服务令牌生成器,然后将生成的令牌放置在 INSTANCE_CONNECTION_NAME 中。INSTANCE_CONNECTION_NAME 可以从 Google Cloud 控制台中的 SQL 实例概览页面中获取。

cloud_sql_proxy -token=ACCESS_TOKEN
-instances=INSTANCE_CONNECTION_NAME=tcp:PORT_NUMBER

更多详细信息请参阅文档 SQL 代理身份验证更多连接方式

对我来说,这解决了 400 错误请求问题。

Response: {
 "error": "invalid_grant",
  "error_description": "Bad Request"
}

请注意 - 如果您使用此连接方式,则必须在 SQL 实例配置页面中允许不安全连接。

0
在我的情况下,我使用了一个与本地机器上相同端口的docker镜像,因此本地mysql不允许访问该端口,因为它已经被使用并运行。我卸载了本地mysql,现在它可以正常工作了。

0

打开任务管理器 -> 服务 -> 停止 MySQL57 或者 Postgres 实例,然后再重试一次。应该可以正常工作。


0

我使用的是Windows 10

服务管理中停止了所有本地的Postgres服务后,它可以正常工作。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接