我正在关注GAE的Django示例,并且无法通过Google Cloud Shell的代理连接到Cloud SQL实例。可能与权限设置有关,因为我看到请求未经授权,
其他背景,
" gcloud beta sql connect auth-instance --user = root"连接没问题。
我有一个SQL代理客户端的服务帐户。
我可能会错过一些东西。有人可以请一些亮点吗?提前谢谢。
提前致谢。
代理日志:
./cloud_sql_proxy -instances=auth-158903:asia-east1:auth-instance=tcp:3306
2017/02/17 14:00:59 Listening on 127.0.0.1:3306 for auth-158903:asia-east1:auth-instance
2017/02/17 14:00:59 Ready for new connections
2017/02/17 14:01:07 New connection for "auth-158903:asia-east1:auth-instance"
2017/02/17 14:03:16 couldn't connect to "auth-158903:asia-east1:auth-instance": dial tcp 107.167.191.26:3307: getsockopt: connection timed out
客户日志:
mysql -u root -p --host 127.0.0.1
Enter password:
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
我也尝试使用凭据文件,但仍然没有运气,
./cloud_sql_proxy -instances=auth-158903:asia-east1:auth-instance=tcp:3306 -credential_file=Auth-2eede8ae0d0b.jason
2017/02/17 14:21:36 using credential file for authentication; email=sql-proxy-client@auth-158903.iam.gserviceaccount.com
2017/02/17 14:21:36 Listening on 127.0.0.1:3306 for auth-158903:asia-east1:auth-instance
2017/02/17 14:21:36 Ready for new connections
2017/02/17 14:21:46 New connection for "auth-158903:asia-east1:auth-instance"
2017/02/17 14:21:48 couldn't connect to "auth-158903:asia-east1:auth-instance": ensure that the account has access to "auth-158903:asia-east1:auth-instance" (and make sure there's no typo in that name). Error during get instance auth-158903:asia-east1:auth-instance: googleapi: **Error 403: The client is not authorized to make this request., notAuthorized**
答案 0 :(得分:2)
如果我只提供服务帐户“Cloud SQL Client”IAM角色,我可以完全重现此问题。当我向我的服务帐户提供“Cloud SQL Viewer”角色时,它也可以连接。我建议你尝试一下,看看它是否有帮助。
答案 1 :(得分:2)
Cloud SQL代理使用端口3307而不是更常用的MySQL端口3306.这是因为它以不同的方式使用TLS并具有不同的IP ACL。因此,允许MySQL流量的防火墙默认情况下不允许使用Cloud SQL代理。
查看网络上是否有阻止端口3307的防火墙。要使用Cloud SQL代理,请将此端口授权为出站连接。
答案 2 :(得分:0)
似乎是网络连接问题。 如果您使用私有IP,请仔细阅读以下内容: https://cloud.google.com/sql/docs/mysql/private-ip
请注意,Cloud SQL实例位于Google托管的网络中,该代理旨在简化VPC网络中与数据库的连接。
简而言之:无法在本地计算机上运行cloud-sql-proxy,因为它不在VPC网络中。它应在与数据库连接到同一VPC的Compute Engine VM上运行。
通常,我要从本地计算机使用gcloud ssh并通过计算引擎中的小型VM转发端口,例如:
gcloud beta compute ssh --zone "europe-north1-b" "instance-1" --project "my-project" -- -L 3306:cloud_sql_server_ip:3306
然后,您可以连接到localhost:3306(确保没有其他程序在运行,或者将第一个端口号更改为本地可用的端口号)