2013-12-16 15 views
8

Meine Google App Engine-Anwendung kann keine Verbindung zu Google Cloud SQL-Instanz mit diesem Fehler verbinden:App Motor nicht zu Google Cloud SQL

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

Ich habe habe die Dokumentation und folgte Anweisungen genau. Ich habe die App als eine autorisierte Anwendung hinzugefügt und das Root-Passwort mit der Cloud-Konsole festgelegt. Ich habe dem Instace auch eine IP-Adresse gegeben und kann mich von Workbench auf dem lokalen Entwicklungscomputer verbinden. Mit Workbench habe ich einen Benutzer hinzugefügt und Berechtigungen konfiguriert. Aber ich kann immer noch nicht von der Entwicklungsversion der App (dieselbe IP wie Workbench) oder der bereitgestellten App eine Verbindung herstellen.

Hier ist meine Verbindungsleitung:

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

diese question scheint dieses Problem ähnlich. Aber auch nach dem Einrichten eines neuen Benutzers und dem Erteilen von Berechtigungen kann ich keine Verbindung herstellen. Irgendeine Idee, wo ich falsch gelaufen bin?

Dank

Antwort

8

Beachten Sie, dass die Root-Einstellung Passwörter nur die Verbindungen kommen over IP gilt. Die Verbindungen von App-Engines zu dem MySQL-Server werden als von localhost kommend angezeigt. Stellen Sie daher sicher, dass das Kennwort für "root @ localhost" das ist, das Sie im Code konfiguriert haben.

Ein schneller Weg, um den Zustand der Passwörter zu überprüfen ist, über IP zu verbinden und die folgende Abfrage:

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> 

Die oben zeigt, wie eine Instanz nach oben zeigt, nachdem das Root-Passwort für Verbindungen über IP-Einstellung ('root @%') zu 'xxx'. Beachten Sie, dass das Kennwort für "root @ localhost" leer ist, sodass Verbindungen von App Engine weiterhin keine Kennwörter erfordern.

+0

Danke für eine sehr klare Antwort :) – jad

2

Wenn Sie von einer autorisierten App Engine-Anwendung aus eine Verbindung zu Cloud SQL herstellen, wird das Kennwort nicht benötigt (es schlägt tatsächlich fehl, wenn Sie versuchen, eine Verbindung mit einem Kennwort herzustellen).

Ändern Sie Ihre Verbindungszeichenfolge zu jdbc: google: mysql: ///? user = root das & Passwort = weglassen Teil

0

Eines, was ich versucht habe versucht, meine Anwendung über einen MySQL-Client eine Verbindung direkt zu meinem Proxy, um zu sehen, ob mein Code das Problem war: Siehe: Connecting mysql Client Using the Cloud SQL Proxy

, die noch Bei mir funktionierte das nicht, was mich zu der Annahme verleitet, dass es sich um etwas mit der eigentlichen Netzwerkverbindung handeln könnte. Ich die Cloud SQL-Proxy bemerkte ich wurde vor Ort tat Rückkehr die richtige Instanz IP-Adresse ausgeführt wird (der Fehler sah etwa so aus:

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

Sie können die IP-Adresse bestätigen zurückgegeben es mit dem in der Cloud SQL-Konsole übereinstimmt.

Ich versuchte dann Verbindung über eine andere Internetverbindung und konnte Verbindung herstellen.Ausblenden es war die Firewall in der ursprünglichen Verbindung, die die Verbindung nicht passieren ließ! Überprüfen Sie alle Sicherheitseinstellungen an Ort und Stelle, die das verhindern können Verbindung vom Durchgehen