Проблема App Engine приложение для подключения к MySQL в CloudSQL - PullRequest
0 голосов
/ 21 сентября 2018

Я настроил SQL второго поколения.Экземпляр и приложение App Engine (Python 2.7) в одном проекте.Я сделал необходимые настройки в соответствии с этой страницы .

app.yaml

runtime: python27
api_version: 1
threadsafe: true
env_variables:
    CLOUDSQL_CONNECTION_NAME: coral-heuristic-215610:us-central1:db-basic-1
    CLOUDSQL_USER: root
    CLOUDSQL_PASSWORD: xxxxxxxxx     
beta_settings:
    cloud_sql_instances: coral-heuristic-215610:us-central1:db-basic-1
libraries:
- name: lxml
  version: latest
- name: MySQLdb
  version: latest
handlers:   
- url: /main
  script: main.app

Теперь, когда я пытаюсь подключиться из приложения (внутри Cloud Shell), ошибка:

OperationalError: (2002, 'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2 "No such file or directory")')

Работает прямое соединение:

$ gcloud sql connect db-basic-1 --user=root

успешно ...

MySQL [correction_dict]> SHOW PROCESSLIST;                                                                                                     
+--------+------+----------------------+-----------------+---------+------+----------+------------------+
| Id     | User | Host                 | db              | Command | Time | State    | Info             |
+--------+------+----------------------+-----------------+---------+------+----------+------------------+
|      9 | root | localhost            | NULL            | Sleep   |    4 |          | NULL             |
|     10 | root | localhost            | NULL            | Sleep   |    4 |          | NULL             |
| 112306 | root | 35.204.173.246:59210 | correction_dict | Query   |    0 | starting | SHOW PROCESSLIST |
| 112357 | root | localhost            | NULL            | Sleep   |    4 |          | NULL             |
| 112368 | root | localhost            | NULL            | Sleep   |    0 |          | NULL             |
+--------+------+----------------------+-----------------+---------+------+----------+------------------+

Я авторизовал IP для подключенияк экземпляру Cloud SQL : The IP are authorized to connect Cloud SQL instance.

Любые подсказки, помогите?

1 Ответ

0 голосов
/ 22 сентября 2018

Google AppEngine Standard предоставляет сокет unix на /cloudsql/[INSTANCE_CONNECTION_NAME], который автоматически соединяет вас с вашим экземпляром CloudSQL.Все, что вам нужно сделать, это подключиться к нему по этому адресу.Для библиотеки MySQLDb это выглядит следующим образом:

    db = MySQLdb.connect(
        unix_socket=cloudsql_unix_socket,
        user=CLOUDSQL_USER,
        passwd=CLOUDSQL_PASSWORD)

(Если вы используете AppEngine Flexible, подключение отличается и может быть найдено здесь )

...