【问题标题】:Amazon RDS: OperationalError: (2003, "Can't connect to MySQL server on rds.amazonaws.com (110)")Amazon RDS:OperationalError:(2003,“无法连接到 rds.amazonaws.com (110) 上的 MySQL 服务器”)
【发布时间】:2021-09-16 23:04:08
【问题描述】:

我已经使用 MySQL 数据库设置了 Amazon Relational Database Service (RDS),我正在尝试将它与我的 django 应用程序连接,但出现上述错误。我在settings.py中的数据库设置如下:

DATABASES = {
'default': {
    'ENGINE': config('db_engine'),
    'NAME': config('db_name'),
    'USER': config('db_user'),
    'PASSWORD': config('db_password'),
    'HOST': config('db_host'),
    'PORT': config('db_port')
}

}

而我的数据库环境变量如下:

db_engine=django.db.backends.mysql
db_name=stagingdatabase
db_user=staginguser
db_password=stagingpassword
db_host=somestagingname.somestagingid.us-east-2.rds.amazonaws.com
db_port=3306

我知道端口是正确的,这是大多数情况下出现此类错误的解决方案。所有其他变量也是正确的。

我无法 ping somestagingname.somestagingid.us-east-2.rds.amazonaws.com 即使它的状态是可用的,所以我如何设置 RDS 肯定有问题:

【问题讨论】:

  • 您能否提供此用例的网络信息?你从哪里执行 django 代码?是否在安全组中启用了 rds 访问?
  • @RafaelAguilar,代码在带有 nginx 的实时 ubuntu 服务器上运行。我也在 ALLOWED_HOSTS 上添加了 db_host。这是你的意思吗?另外,我不知道我需要在安全组中启用某种 rds 访问权限。
  • 我猜 Nginx 在 EC2 机器上运行的是什么。对吧?
  • 关于 DB 和 EC2 机器之间的安全访问,您需要进行一些配置检查:docs.aws.amazon.com/en_us/AmazonRDS/latest/UserGuide/…
  • 让我知道它是如何进行的,如果它有效,请编辑以前作为答案。

标签: python mysql django amazon-rds


【解决方案1】:

这似乎是网络问题,Django 服务器无法访问数据库,这可能发生在多种问题上:

  • 它们位于不同且未连接的 VPN 或网络中。

  • 运行 Django 的 EC2 机器的安全组不允许此出站流量到此网络端口组合。

  • RDS 中的安全组不允许来自 EC2 机器所在网络的入站流量用于 3306 端口。

如果您处于使用随 AWS 账户提供的默认网络的场景中,则可能会放弃第一个场景。此外,默认情况下,EC2 机器允许所有传出流量。

所以我最好的建议是开始检查控制 RDS 入站流量的安全组。

欲了解更多信息:https://docs.aws.amazon.com/en_us/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html

【讨论】:

    猜你喜欢
    • 2014-02-02
    • 1970-01-01
    • 2013-03-12
    • 2017-07-07
    • 1970-01-01
    • 2014-03-10
    • 2014-08-22
    • 2014-11-08
    • 1970-01-01
    相关资源
    最近更新 更多