我正在"试点"安装一个在 GCE 实例中运行的 Tomcat 网络应用程序,该应用程序与第二代 MySQL 服务器通信。当我接近使其可操作时,我现在遇到了一些我难以理解的东西。
鉴于:
该应用程序位于 Java(在 Tomcat 服务器中运行的 Web 应用程序上下文)中,旨在成为 GCE 实例的负载均衡集群。
所有这些实例都共享几个通用存储桶,以及一个用于其数据库的通用第二代 MySQL 实例。
现在,负责Web应用程序的开发人员在他自己的私有Google Cloud项目中运行了一个实验集群,在这个集群中,他只是向全世界开放了SQL服务器,并没有打扰任何SSL。但显然,当我们越来越接近真实事物时,这不会飞。
我试图更接近真实的东西。但是,当我不知道GCE实例将具有哪些IP地址时,我应该如何设置数据库连接?
查看我的MySQL实例的"授权"选项卡,我看到:
App 引擎授权
默认情况下,此项目中的所有应用都经过授权。要授权其他项目中的应用,请
按照以下步骤操作。
此项目中的应用:全部已授权。
但这就是"App Engine"。不谷歌计算引擎。
我看到了一个名为"JDBC Socket Factory"的东西,但它在一个关于从Google Cloud之外运行的应用程序连接的页面上。
我看到一个关于在Google Compute实例上连接MySQL客户端的页面(这引出了一个问题,"当我可以通过更用户友好的东西从桌面连接时,我为什么要这样做?")。未连接在动态创建的实例上运行的 Tomcat Web 应用上下文。
我在这里错过了什么?
我现在一直在试验代理,我发现如果代理在我的帐户下运行,我可以连接,但如果它在两个也应该能够连接的服务帐户之一下运行,则不能连接。
在所有三种情况下,代理都会启动,并正在等待连接。如果我以自己的身份运行代理,我可以很好地连接,无论是从默认的MySQL客户端,还是从Sequel Pro,还是从Squirrel。但是,如果我从默认服务帐户或我专门为此创建的服务帐户运行代理,则客户端将获得:
MySQL说:在"读取初始"时失去与MySQL服务器的连接 通信数据包",系统错误:0
代理显示:
2018/03/22 09:38:23 New connection for "<REDACTED>"
2018/03/22 09:38:24 couldn't connect to "<REDACTED>": ensure that the
account has access to "<REDACTED>" (and make sure there's no typo in
that name). Error during createEphemeral for <REDACTED>: googleapi:
Error 403: Access Not Configured. Cloud SQL Administration API has
not been used in project 773874261491 before or it is disabled.
Enable it by visiting
https://console.developers.google.com/apis/api/sqladmin.googleapis.com
/o erview?project=<REDACTED> then retry. If you enabled this API
recently, wait a few minutes for the action to propagate to our
systems and retry., accessNotConfigured
我有:
- 云 SQL 管理员
- 云 SQL 客户端
- 计算实例管理员 (v1)
- 计算网络管理员
- 计算安全管理员
- 部署管理器编辑器
- 服务帐户参与者
- 服务帐户管理员
- 服务帐户密钥管理员
- 项目IAM管理员
- 存储管理员
默认服务帐户具有:
- 云 SQL 客户端编辑器
我创建的服务帐户具有:
- 云 SQL 客户端
在尝试重新启用云 SQL API 的建议下,我禁用并重新启用它。没有变化。还:
Jamess-Mac-mini:~ jamesl$ ./cloud_sql_proxy -instances=<REDACTED>=tcp:3306
2018/03/22 09:37:42 Listening on 127.0.0.1:3306 for <REDACTED>
2018/03/22 09:37:42 Ready for new connections
{Sequel Pro connected just fine}
2018/03/22 09:37:50 New connection for "<REDACTED>"
2018/03/22 09:37:52 New connection for "<REDACTED>"
2018/03/22 09:38:01 Client closed local connection on 127.0.0.1:3306
2018/03/22 09:38:01 Client closed local connection on 127.0.0.1:3306
^C
Jamess-Mac-mini:~ jamesl$ ./cloud_sql_proxy -instances=<REDACTED>=tcp:3306 -credential_file=<REDACTED my new service account>.json
2018/03/22 09:38:19 using credential file for authentication; email=<REDACTED my new service account>
2018/03/22 09:38:19 Listening on 127.0.0.1:3306 for <REDACTED>
2018/03/22 09:38:19 Ready for new connections
{Sequel Pro failed to connect}
2018/03/22 09:38:23 New connection for "<REDACTED>"
2018/03/22 09:38:24 couldn't connect to "<REDACTED>": ensure that the
account has access to "<REDACTED>" (and make sure there's no typo in
that name). Error during createEphemeral for <REDACTED>: googleapi:
Error 403: Access Not Configured. Cloud SQL Administration API has
not been used in project 773874261491 before or it is disabled.
Enable it by visiting https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview?project=<REDACTED>
then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry., accessNotConfigured
^C
Jamess-Mac-mini:~ jamesl$ ./cloud_sql_proxy -instances=<REDACTED>=tcp:3306 -credential_file=<REDACTED default service account>.json
2018/03/22 09:46:41 using credential file for authentication; email=<REDACTED default service account>
2018/03/22 09:46:41 Listening on 127.0.0.1:3306 for <REDACTED>
2018/03/22 09:46:41 Ready for new connections
{Sequel Pro failed to connect}
2018/03/22 09:46:45 New connection for "<REDACTED>"
2018/03/22 09:46:46 couldn't connect to "<REDACTED>": ensure that the account has access to "<REDACTED>" (and make sure there's no typo in that name). Error during createEphemeral for <REDACTED>: googleapi: Error 403: Access Not Configured. Cloud SQL Administration API has not been used in project <REDACTED> before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview?project=<REDACTED> then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry., accessNotConfigured
^C
当计算引擎实例的源 IP 可能要更改时,可以考虑使用云 SQL 代理。本指南的第 8 步介绍了如何启动代理,您可以使用 mysql 客户端(步骤 9)测试来自 GCE 实例的连接。
设置代理后,在连接 URL 中使用"localhost",因为它将是将在 127.0.0.1 上进行连接的代理。如果您使用 TCP 套接字连接,则使用 Unix 套接字则有所不同。