我正在遵循GAE的Django样本,并且有问题可以通过Google Cloud Shell的代理连接到Cloud SQL实例。可能与权限设置有关,因为我看到未经授权的请求,
其他上下文,
-
" gcloud beta sql connect airstance -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**
我只能给出我的服务帐户"云SQL客户端" iam角色,可以准确地重现此问题。当我将服务帐户提供"云SQL查看器"角色时,它可以连接。我建议您尝试一下,看看是否有帮助。
它看起来像网络连接问题。如果您使用私人IP,请仔细阅读此信息:https://cloud.google.com/sql/docs/mysql/private-ip
请注意,Cloud SQL实例位于Google托管网络中,代理将用于简化VPC网络中DB的连接。
简而言之:从本地计算机运行Cloud-SQL-Proxy将不起作用,因为它不在VPC网络中。它应该从连接到与DB相同的VPC的计算引擎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(确保其他任何内容都没有运行或将第一个端口号更改为本地免费的端口号)
云SQL代理使用端口3307而不是更常见的MySQL端口3306。这是因为它以不同的方式使用TLS,并且具有不同的IP ACL。结果,允许MySQL流量的防火墙默认不允许云SQL代理。
看看网络上是否有阻止端口3307的防火墙。要使用云SQL代理,请授权此端口进行出站连接。