应用引擎无法连接到Google Cloud SQL。

8
我的Google应用引擎应用程序连接到Google云SQL实例时出现错误,错误信息为:
'PDOException' with message 'SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it.

我已经查看了文档并且仔细遵循了指示。我将应用添加为授权应用程序,并使用云控制台设置了根密码。我还给实例分配了一个IP地址,并可以从本地开发机器上的Workbench连接到它。使用Workbench,我添加了一个用户并配置了权限。但是我仍然无法从dev版本的应用程序(与Workbench相同的IP)或部署的应用程序连接到它。
这是我的连接行:
$conn = new PDO('mysql:unix_socket=/cloudsql/****:****;charset=utf8', 'the_username', 'its_password');

这个问题似乎与这个问题相似。然而,即使我设置了新用户并授予权限,我仍然无法连接。你知道我做错了什么吗?
谢谢
3个回答

8
请注意,设置根密码只适用于通过IP进行的连接。来自应用引擎的连接会显示为来自本地MySQL服务器。因此,请确保“root@localhost”的密码与您在代码中配置的密码相同。
检查密码状态的快速方法是通过IP连接并发出以下查询:
mysql> SELECT user,host,password FROM mysql.user;
+-------+-----------+-------------------------------------------+
| user  | host      | password                                  |
+-------+-----------+-------------------------------------------+
| root  | localhost |                                           |
| root  | 127.0.0.1 |                                           |
| root  | ::1       |                                           |
|       | localhost |                                           |
| root  | %         | *3D56A309CD04FA2EEF181462E59011F075C89548 |
| admin | 127.0.0.1 |                                           |
+-------+-----------+-------------------------------------------+
6 rows in set (0.11 sec)

mysql> SELECT password('xxx');
+-------------------------------------------+
| password('xxx')                           |
+-------------------------------------------+
| *3D56A309CD04FA2EEF181462E59011F075C89548 |
+-------------------------------------------+
1 row in set (0.11 sec)

mysql>

上述内容展示了在将IP连接('root@%')的根密码设置为“xxx”后,实例如何显示出现。请注意,“root@localhost”的密码为空,因此来自App Engine的连接仍不需要任何密码。


2

当从授权的App Engine应用程序连接到Cloud SQL时,不需要密码(如果尝试使用密码连接将失败)。

将连接字符串更改为jdbc:google:mysql:///? user=root,省略&password=部分。


0

我尝试的一件事是直接通过MySQL客户端连接到我的代理应用程序,以查看是否是我的代码有问题:请参见:使用Cloud SQL Proxy连接mysql客户端

但这对我仍然没有起作用,这让我相信可能是实际网络连接的问题。我注意到我本地运行的Cloud SQL代理确实返回了正确的实例IP地址(错误看起来像这样:

couldn't connect to "{connectionName}": dial tcp {ip address}:3307: getsockopt: operation timed out

您可以确认返回的IP地址与Cloud SQL控制台中的IP地址匹配。

然后,我尝试使用不同的互联网连接进行连接,并成功连接。原来是原始连接中的防火墙未能让连接发生!请仔细检查任何安全设置,以防止连接无法通过。


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