Django 2.0.1连接AWS EC2上MySQL数据库失败求助
解决Django 2.0.1连接EC2上MySQL失败的问题
我来帮你一步步排查这个连接问题,这类故障大多出在网络权限、MySQL配置或者Django依赖环节,咱们逐个击破:
一、先排查EC2安全组的网络权限(最常见坑点)
EC2默认会屏蔽外部对3306端口的访问,这是首要检查项:
- 登录AWS控制台找到你的EC2实例,进入安全组配置页
- 添加一条入站规则:
- 类型选
MySQL/Aurora(对应端口3306) - 测试阶段可暂时将源地址设为
0.0.0.0/0(生产环境务必改成你Django服务器的固定IP) - 保存后先试试用本地MySQL客户端(比如Navicat、mysql命令行)连接EC2的MySQL,如果连不上,问题肯定在EC2侧,不用先纠结Django配置。
- 类型选
二、检查MySQL的绑定地址配置
EC2上的MySQL默认可能只绑定了localhost,拒绝外部连接:
- 登录EC2实例,找到MySQL配置文件(通常是
/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf) - 找到
bind-address行,修改为0.0.0.0(允许所有IP访问)或你的Django服务器公网IP - 重启MySQL服务:
sudo systemctl restart mysql(Ubuntu/Debian)或sudo service mysqld restart(CentOS)
三、确认MySQL用户的访问权限
你用的root用户默认可能仅允许localhost访问:
- 登录EC2上的MySQL:
mysql -u root -p - 执行授权命令:
这里GRANT ALL PRIVILEGES ON graph.* TO 'root'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;%表示允许任意IP访问root用户,测试阶段可以这么用,生产环境建议创建专属Django用户并限制IP范围。
四、核对Django settings配置细节
你的配置框架没问题,但要注意几个细节:
HOST字段务必填EC2的公网IP/弹性IP,不要填hostname(除非你已经做好DNS解析)- 确认
PASSWORD和EC2上MySQL的root密码完全一致,注意大小写和特殊字符 - 如果你用的是Python3,必须安装正确的MySQL驱动:
pip install mysqlclient(Django2.0.x依赖这个,别用pymysql,容易有兼容问题)
五、测试基础网络连通性
在运行Django的服务器上,用以下命令验证网络:
- 测试EC2可达性:
ping 你的EC2公网IP,看是否能正常响应 - 测试端口连通:
telnet 你的EC2公网IP 3306,如果能连接会显示MySQL的欢迎信息,连不上则说明网络层面有拦截
按这个顺序排查,基本能定位到问题根源,先从网络和MySQL权限入手,这两个是最常见的故障点。
内容的提问来源于stack exchange,提问作者Nithish Albin
相关产品推荐
相关产品推荐

