首页 > 解决方案 > 无法在 Django 2.xx Python AppEngine 中连接到 MySQL 服务器

问题描述

我正在尝试为我的 APPEngine 帐户使用云 SQL / mysql 实例。该应用程序是一个 python django-2.1.5 appengine 应用程序。我在谷歌云中创建了一个 MYSQL 实例。

我在从 SQL 实例详细信息复制的 app.yaml 文件中添加了以下内容:

beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>=tcp:<TCP_PORT>
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'my-db',
            'USER': 'appengine',
            'PASSWORD': 'xxx',
            'HOST': '111.111.11.11', # used actual ip
            'PORT': '3306'
        }
    }
DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '/cloudsql/<your-project-id>:<your-cloud-sql-instance>',
            'NAME': '<your-database-name>',
            'USER': 'root',
        }
    }

我的问题:

OperationalError: (2003, "Can't connect to MySQL server on '0.0.0.0' ([Errno 111] Connection refused)")

标签: pythonmysqldjangogoogle-app-enginegoogle-cloud-sql

解决方案


App Engine 对特定实例的 IP 地址没有任何保证,并且可能随时更改。由于它是一个无服务器平台,它抽象了基础设施,让您可以专注于您的应用程序。

使用 App Engine Flex 时有两个选项:Unix 域套接字和 TCP 端口。App Engine 为您提供哪一种取决于您在 app.yaml 中指定的方式:

  • cloud_sql_instances: <INSTANCE_CONNECTION_NAME>/cloudsql/<INSTANCE_CONNECTION_NAME>
  • cloud_sql_instances: <INSTANCE_CONNECTION_NAME>=tcp:<TCP_PORT>提供本地 tcp 端口 ( 127.0.0.1:<TCP_PORT>)。

您可以在“从 App Engine 连接”页面上找到有关此内容的更多信息。


推荐阅读