将Google Cloud Compute连接到Google Cloud SQL ERROR 2013(HY000)

时间:2016-03-20 13:00:19

标签: mysql google-compute-engine google-cloud-platform google-cloud-sql

当尝试使用docker cloud proxy连接到mysql时,如下所示:

mysql -u <USERNAME> -p -S /cloudsql/<YOUR-PROJECT-ID>:<REGION-NAME>:<SQL-INSTANCE-NAME>

我收到此错误

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 95

根据文档,这就是我想设置代理的方式

docker run -d -v /cloudsql:/cloudsql \
  -v /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt \
  b.gcr.io/cloudsql-docker/gce-proxy /cloud_sql_proxy -dir=/cloudsql \
  -instances=<PROJECT-ID>:<REGION-NAME>:<SQL-INSTANCE-NAME>

以下是设置它的documentation

对于那些可能会问这个问题的人,我确实正确地设置了这些参数

<PROJECT-ID>:<REGION-NAME>:<SQL-INSTANCE-NAME>

代理的输出:

2016/03/20 19:49:15 listenInstance: "<PROJECT-ID>:<REGION-NAME>:<SQL-INSTANCE-NAME>"
2016/03/20 19:49:15 Remove("/cloudsql/<PROJECT-ID>:<REGION-NAME>:<SQL-INSTANCE-NAME>") error: remove /cloudsql/<PROJECT-ID>:<REGION-NAME>:<SQL-INSTANCE-NAME>: no such file or directory
2016/03/20 19:49:15 Open socket for "<PROJECT-ID>:<REGION-NAME>:<SQL-INSTANCE-NAME>" at "/cloudsql/<PROJECT-ID>:<REGION-NAME>:<SQL-INSTANCE-NAME>"
2016/03/20 19:49:15 Socket prefix: /cloudsql
2016/03/20 19:51:29 Got a connection for "<PROJECT-ID>:<REGION-NAME>:<SQL-INSTANCE-NAME>"
2016/03/20 19:51:30 couldn't connect to "<PROJECT-ID>:<REGION-NAME>:<SQL-INSTANCE-NAME>": googleapi: Error 403: Insufficient Permission, insufficientPermissions

所以我查看了我的计算实例,我的Api访问范围已被禁用,我之前检查了prerequisites,他们说如果我正在创建我的云sql和计算实例项目然后我的计算应具有编辑权限。无论哪种方式,我都无法弄清楚如何为我的云sql实例提供计算实例编辑器权限。

请告诉我如何为cloud sql提供计算实例编辑器权限。

1 个答案:

答案 0 :(得分:4)

insufficientPermissions表示计算引擎VM正在使用默认的Compute Engine服务帐户,并且在创建VM时未启用Cloud SQL Admin作用域。在本指南的第一步中,系统会要求您验证是否存在正确的范围。

有两种方法可以解决这个问题:

选项a)创建启用了Cloud SQL管理范围的新VM。

创建新VM时,请在Set access for each API中选择Identity and API access,然后将Cloud SQL切换为Enabled

enter image description here

如果您使用实例模板,请在实例模板上进行上述更改,并使用它来创建新实例。

或者,您可以选择Allow full access to all Cloud APIs但请注意,这将允许VM上的任何应用程序使用服务帐户凭据访问任何Cloud API,该凭据对项目具有editor权限默认值。

选项b)使用其他服务帐户的凭据

如果无法创建新VM,则可以create a new service account将凭证文件下载到VM并使用-credential_file参数使代理使用它。必须至少授予新服务帐户editor项目访问权限。

提供更好的错误消息是一个未解决的问题: https://github.com/GoogleCloudPlatform/cloudsql-proxy/issues/6