问题App Engine应用程序连接到CloudSQL中的MySQL

时间:2018-09-21 14:00:42

标签: python-2.7 google-cloud-platform mysql-python google-cloud-sql mysql-connector-python

我已经配置了SQL第二代。实例和App Engine应用程序(Python 2.7)在一个项目中。我已经根据that page进行了必要的设置。

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 :(得分:0)

Google AppEngine标准在/cloudsql/[INSTANCE_CONNECTION_NAME]提供了一个Unix套接字,可自动将您连接到CloudSQL实例。您需要做的就是在该地址连接它。对于MySQLDb库,看起来像这样:

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

(如果您正在运行AppEngine Flexible,则连接会有所不同,可以here找到)