Django syncdb 无法连接到单独的 EC2 实例上的 MySQL

Django syncdb 无法连接到单独的 EC2 实例上的 MySQL

我正在尝试在 AWS 上部署一个 django 应用程序,其设置中有一个运行 nginx/uwsgi 的 EC2 实例和第二个安装了 MySQL 5.5 的 EC2 实例。两者都属于默认组(启用了 SSH、HTTP、HTTPS 和 MYSQL)。最终,我将拆分 DB 和应用程序/Web 服务器的组,但现在我想让应用程序正常运行。

我的 django db 设置如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db',         
        'USER': 'db_user',      
        'PASSWORD': 'db_pwd',
        'HOST': '<public dns of MySQL EC2 instance(tried also private ip)>',
        'PORT': '3306', 
    }
}

每次我尝试运行 syncdb 时都会出现以下错误:

_mysql_exceptions.OperationalError:(1130,“主机‘ip-xx-xx-xx-xxx.ec2.internal’不允许连接到此 MySQL 服务器”)

请注意,当我在与 Web/应用服务器相同的 EC2 实例中设置 MySQL 时,应用程序可以运行。在该实例中,我的设置文件数据库设置如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db',         
        'USER': 'db_user',      
        'PASSWORD': 'db_pwd',
        'HOST': '',
        'PORT': '', 
    }
}

我按照一篇文章的建议,注释掉了 /etc/mysql/my.cnf 文件中的绑定 127.0.0.1,甚至将其设置为 0.0.0.0(更改后重新启动了 MySQL),但这没有帮助。

有什么建议么?

谢谢

二进制迷宫

答案1

[从评论流中整理出这个答案。]

设置安全组时,不要为一般互联网 (0.0.0.0/0) 启用 MySQL 端口 (3306),因为这很危险。相反,只为您账户中的安全组启用端口 3306,这样只有您的实例可以连接到它。

从另一个实例上的客户端连接时,您将需要使用数据库服务器的内部 IP 地址,而不是公共 IP 地址。

“bind-address = 0.0.0.0” 让 MySQL 接受来自其他主机的连接(受安全组和 iptables 规则约束)。

授予“someuser”@“%”权限允许该用户从任何主机进行连接,但须遵守安全组的限制。

相关内容