2013-12-16 116 views
8

我的谷歌应用程序引擎应用程序无法与此错误连接到谷歌云SQL实例:应用程序引擎无法连接到谷歌云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似乎是类似这样的问题。但是,即使设置新用户并授予权限,我仍然无法连接。任何想法我错了?

感谢

回答

8

注意,设置root密码只适用过来IP连接。来自App Engines的连接向本地主机显示的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密码后怎么显示出来( 'root @%')改为'xxx'。请注意,'root @ localhost'的密码为空,所以来自App Engine的连接仍不需要任何密码。

+0

谢谢你一个非常明确的答案:) – jad

2

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

将连接字符串更改为jdbc:google:mysql:///?用户=根省略&密码=部分

0

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

这仍然没有为我工作,这导致我相信它可能是与实际网络连接的东西。我注意到了云SQL代理我是在本地运行没有返回正确的实例IP地址(错误看起来是这样的:

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

可以确认返回的IP地址也与一个在云SQL控制台相匹配。

然后,我尝试通过不同的互联网连接来连接,并能够连接起来。原来这是防火墙中,这不是让连接发生原始连接!在这可以防止地方仔细检查任何安全设置连接经过。

相关问题