2013-12-16 3 views
8

Мой Google приложение App Engine не удается подключиться к Google, например облака SQL с этой ошибкой:App двигатель не удается подключиться к Google Cloud SQL

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

Я проверил документацию и внимательно следовали инструкциям. Я добавил приложение в качестве авторизованного приложения и установил пароль root с помощью облачной консоли. Я также предоставил ip-адрес и могу подключиться к нему из Workbench на локальной машине разработки. Используя workbench, я добавил пользовательские и настроенные разрешения. Но я до сих пор не могу подключиться к нему из dev-версии приложения (такого же ip-инструмента, как Workbench), или из развернутого приложения.

Вот мое подключение:

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

это question, кажется, похожа на эту проблему. Однако даже после настройки нового пользователя и предоставления разрешений я все еще не могу подключиться. Любая идея, где я пошла не так?

Благодаря

ответ

8

Обратите внимание, что установка корневых паролей применяется только соединение, поступающее через IP. Соединения с App Engine отображаются на сервере 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 @%') в 'xxx'. Обратите внимание, что пароль для «root @ localhost» пуст, поэтому для соединений из App Engine по-прежнему не требуются пароли.

+0

Спасибо за очень четкий ответ :) – jad

2

При подключении к Cloud SQL из авторизованного приложения App Engine пароль не требуется (на самом деле он не будет работать, если вы попытаетесь установить соединение с паролем).

Измените строку подключения на jdbc: google: mysql: ///? пользователь = корень опуская & пароль = часть

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-адрес вернулся туда совпадает с одним в облаке SQL консоль.

затем я попытался подключение через другое подключение к интернету и смог подключиться. Оказывается, это был брандмауэра в оригинальной связи, что не выпускающее соединение произойдет! Дважды проверьте все параметры безопасности в месте, которое может предотвратить подключение от этого.

Смежные вопросы