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

我试图在AWS上部署一个django应用程序,其中我有一个运行nginx / uwsgi的EC2实例,另一个EC2实例,我已经安装了MySQL 5.5。 都属于默认组(启用SSH,HTTP,HTTPS和MYSQL)。 最后,我会分组数据库和应用程序/ Web服务器,但现在我想让应用程序工作。

我的django数据库设置如下所示:

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,“Host'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文件中的bind 127.0.0.1注释掉了,甚至把它设置为0.0.0.0(更改后重新启动MySQL),但是没有帮助。

有什么build议么?

谢谢

二进制迷宫

[把这个答案从评论stream中整理出来。]

设置安全组时,请勿为通用Internet(0.0.0.0/0)启用MySQL端口(3306),因为这是危险的。 相反,启用3306端口只适用于您帐户中的安全组,因此只有您的实例可以连接到它。

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

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

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