Проблемы CloudSQL PDO (unix_socket) в Google App Engine

Я пытаюсь подключиться к моему экземпляру CloudSQL FROM App Engine. Способ, которым я настроил это, – использовать статический IP-адрес, который я могу использовать для подключения к нему из внешнего App Engine (а именно, в моей среде разработки). Однако, когда приложение работает в GAE, единственный способ подключения к базе данных – использовать unix_socket. Единственная документация, которую я нашел на этом, – это собственные документы Google .

Согласно документации, этого должно быть достаточно для подключения:

$db = new PDO('mysql:unix_socket=/cloudsql/my-prj:db1;charset=utf8', '<username>', '<password>' ); 

Я могу подключиться к базе данных с помощью пароля root, который я создал через консоль CloudSQL, а также с использованием дополнительных пользователей, созданных с помощью локального клиента MySQL. SO … если я пытаюсь подключиться к GAE с использованием IP, он не работает (как задокументировано). Но если я попытаюсь использовать unix_socket = / cloudsql / … , я получаю следующую ошибку:

 SQLSTATE[HY000] [1045] Access denied for user 'bookie'@'localhost' (using password: YES) 

(где, конечно, имя пользователя – букмекер).

Если в строке инициализации PDO включить параметр хоста , например:

 $db = new PDO('mysql:host=123.456.789.101;unix_socket=/cloudsql/...'); 

Вместо этого я получаю эту ошибку:

 SQLSTATE[HY000] [2002] Unable to find the socket transport "tcp" - did you forget to enable it when you configured PHP? 

Просветите меня, если вы …


Обновление и решение

Как упоминал Разван, проблема заключалась в том, что как root, так и любой другой пользователь, которого я создал, не получили никаких привилегий на localhost . root имел привилегии на localhost, но у него не было установленного для него пароля.

Два решения:

1) Подключитесь без пароля для root:

 $db = new PDO('mysql:unix_socket=...', 'root', ''); 

2) Исправьте разрешения для других пользователей с помощью google_sql.py (или, тем не менее, вы можете подключиться к определенному клиенту SQL / MySQL):

 GRANT ALL ON `localhost`.* to bookie; 

Related of "Проблемы CloudSQL PDO (unix_socket) в Google App Engine"

Соединения из App Engine будут отображаться в Cloud SQL с host = 'localhost'. Поэтому убедитесь, что учетные записи на стороне mysql согласуются с теми, с которыми вы пытаетесь установить соединение.

Примечание. Разрешения для конкретного пользователя можно использовать с запросом типа «SHOW GRANTS FOR» bookie @ localhost.