2013-12-16 148 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控制檯相匹配。

然後,我嘗試通過不同的互聯網連接來連接,並能夠連接起來。原來這是防火牆中,這不是讓連接發生原始連接!在這可以防止地方仔細檢查任何安全設置連接經過。

相關問題