Приложение моего приложения Google не удается подключиться к экземпляру sql-сервера Google с этой ошибкой:
'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');
этот вопрос, похоже, подобен этой проблеме. Однако даже после настройки нового пользователя и предоставления разрешений я все еще не могу подключиться. Любая идея, где я пошла не так?
благодаря
Обратите внимание, что при установке корневых паролей применяются только соединения, идущие по 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>
Вышеприведенное показывает, как экземпляр появляется после установки пароля root для подключений по IP («root @%») до «xxx». Обратите внимание, что пароль для «root @ localhost» пуст, поэтому для соединений из App Engine по-прежнему не требуются пароли.
При подключении к Cloud SQL из авторизованного приложения App Engine пароль не требуется (на самом деле он не будет работать, если вы попытаетесь установить соединение с паролем).
Измените строку подключения на jdbc: google: mysql: ///? user = корень, опуская & password = part
Одна вещь, которую я пробовал, – это попытаться подключиться к моему приложению через клиент MySQL непосредственно к моему прокси, чтобы проверить, не был ли мой код проблемой: См.: Подключение клиента mysql с помощью Cloud SQL Proxy
Это все еще не работало для меня, что заставило меня поверить, что это может быть что-то с фактическим сетевым подключением. Я заметил, что прокси-сервер Cloud SQL, который я запускал локально, возвращал правильный IP-адрес экземпляра (ошибка выглядела примерно так:
couldn't connect to "{connectionName}": dial tcp {ip address}:3307: getsockopt: operation timed out
Вы можете подтвердить, что IP-адрес, полученный там, совпадает с таковым в Cloud Cloud Console.
Затем я попытался подключиться через другое интернет-соединение и смог подключиться. Оказывается, это был брандмауэр в исходном соединении, который не позволял подключиться! Дважды проверьте настройки безопасности, которые могут препятствовать прохождению соединения.