应用引擎无法连接到Google云sql

时间:2013-12-16 16:12:04

标签: php google-app-engine google-cloud-sql

我的Google应用引擎应用无法通过此错误连接到Google云端sql实例:

'PDOException' with message 'SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it.

我检查了文档并严格按照说明操作。我将应用程序添加为授权应用程序,并使用云控制台设置root密码。我还给了instace一个ip地址,可以从本地开发机器上的Workbench连接到它。使用工作台,我添加了用户和配置的权限。但我仍然无法从应用程序的开发版本(与工作台相同的ip)或已部署的应用程序连接到它。

这是我的连线:

$conn = new PDO('mysql:unix_socket=/cloudsql/****:****;charset=utf8', 'the_username', 'its_password');

question似乎与此问题类似。但是,即使在设置新用户并授予权限后,我仍然无法连接。我知道哪里出错了?

由于

3 个答案:

答案 0 :(得分:8)

请注意,设置root密码仅应用来自IP的连接。 App Engines的连接显示MySQL服务器来自localhost。因此,请确保“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 @%')设置root密码到'xxx'后如何显示实例。请注意,“root @ localhost”的密码为空,因此App Engine的连接仍然不需要任何密码。

答案 1 :(得分:2)

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

将您的连接字符串更改为jdbc:google:mysql:///? user = root省略& password = part

答案 2 :(得分:0)

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

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

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

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

然后我尝试通过不同的互联网连接进行连接并且能够连接。事实证明原始连接中的防火墙没有让连接发生!仔细检查可能阻止连接通过的任何安全设置。