我的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似乎与此问题类似。但是,即使在设置新用户并授予权限后,我仍然无法连接。我知道哪里出错了?
由于
答案 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地址匹配。
然后我尝试通过不同的互联网连接进行连接并且能够连接。事实证明原始连接中的防火墙没有让连接发生!仔细检查可能阻止连接通过的任何安全设置。