python - 无法在 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>
我已为我的 appengine 项目 xxx-app 的所有者 xxx- 授予
app@appspot.gserviceaccount.com
权利Cloud SQL Client
。XYZ
我已经为可以连接到所有主机的应用程序创建了一个特定的数据库用户帐户(* 选项)我在 settings.py 中的连接详细信息如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'my-db',
'USER': 'appengine',
'PASSWORD': 'xxx',
'HOST': '111.111.11.11', # used actual ip
'PORT': '3306'
}
}
- 我也按照https://github.com/GoogleCloudPlatform/appengine-django-skeleton/blob/master/mysite/settings.py尝试过:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '/cloudsql/<your-project-id>:<your-cloud-sql-instance>',
'NAME': '<your-database-name>',
'USER': 'root',
}
}
- 我也无法从本地连接。但是,如果我做一个
Add Network
本地 IP 然后尝试连接本地连接。使用 CIDR 表示法添加本地 IP 地址的网络后,该应用程序在本地运行良好。
我的问题:
- 如果不添加 AppEngine 分配的 IP 地址,我将无法连接到 Cloud sql。它给了我一个错误:
OperationalError: (2003, "Can't connect to MySQL server on '0.0.0.0' ([Errno 111] Connection refused)")
- 在哪里可以找到 appengine 分配的 IP 地址。即使是暂时的,我也不介意。我知道如果我需要静态 IP 地址,我必须创建一个计算 VM 实例。
解决方案
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 连接”页面上找到有关此内容的更多信息。
推荐阅读
- r - 过滤唯一行忽略 NA
- amazon-web-services - 访问雪花文件系统
- android - setOnCreateContextMenuListener 在 RecycleView OnBindViewHolder 中不起作用
- html - 选择mat-option(角度)时如何调用方法?
- sql-server - 为什么由于缺少“下一个使用的文件组”而无法重新分区我的 SQL Server 表?
- python - 如何在python selenium中将文本框数据转换为整数
- ubuntu - 无法找到软件包 gluu-server
- c# - 字符串,c#如何同时比较字符串
- .htaccess - 重写规则在生产映像的 MAMP Pro 开发环境中不起作用
- tensorflow - 如何在 python 或 tfjs 中使用智能回复自定义操作?