Django切换至MySQL后出现连接被拒绝问题求助
排查Django切换MySQL后ERR_CONNECTION_REFUSED的问题
刚上手第一个Django项目就碰到数据库切换的坑,太闹心了!ERR_CONNECTION_REFUSED本质是连接层面的失败,咱们一步步拆解排查:
1. 先确认MySQL服务是不是在运行
这是最容易忽略的点!
- Windows:打开「服务」列表(Win+R输入
services.msc),找到MySQL服务,看状态是不是「正在运行」,没运行的话右键启动它。 - Linux:在终端执行
sudo systemctl status mysql,如果显示inactive,就用sudo systemctl start mysql启动。 - Mac:如果是brew安装的,执行
brew services list看状态,启动用brew services start mysql;如果是手动安装的,用mysql.server start。
2. 检查数据库HOST配置是否正确
你配置里写的'HOST': '12...'看起来没写完?
- 如果是本地MySQL,优先用
'localhost'或者'127.0.0.1'(两者有区别:localhost用Unix socket,127.0.0.1用TCP/IP,有时候换一下就能解决)。 - 如果是远程MySQL,要确认IP地址完全正确,而且远程服务器的MySQL允许外部连接。
3. 确认MySQL端口是否匹配(默认3306)
Django默认用3306端口连接MySQL,如果你的MySQL修改过端口,必须在settings里加上'PORT': '你的端口号'(比如'PORT': '3307')。
可以用终端测试端口是否通:telnet 127.0.0.1 3306(替换成你的HOST和端口),如果连接失败,说明端口不对或者被挡住了。
4. 验证数据库用户的连接权限
即使用户名密码正确,用户也可能没有从当前主机连接数据库的权限:
- 登录MySQL控制台:
mysql -u root -p - 执行授权命令(替换成你的db_name、user、主机IP):
如果是本地测试,主机可以用GRANT ALL PRIVILEGES ON db_name.* TO 'user'@'你的本地IP' IDENTIFIED BY 'password';'%'(允许所有主机连接,注意生产环境别这么用),或者'localhost'。 - 刷新权限:
FLUSH PRIVILEGES;
5. 确保MySQL客户端依赖安装正确
Django连接MySQL需要对应的客户端库,没装的话会悄悄失败:
- 优先安装
mysqlclient:pip install mysqlclient(Windows如果装不上,可能需要先装Visual Studio Build Tools,或者用下面的替代方案)。 - 替代方案:安装
pymysql,然后在项目根目录的__init__.py里添加两行代码:import pymysql pymysql.install_as_MySQLdb()
6. 查看Django的控制台日志
浏览器只显示连接拒绝,但Django的运行日志里肯定有更详细的错误!
重新启动Django:python manage.py runserver,仔细看终端输出,比如有没有Access denied for user、Can't connect to MySQL server这类提示,这些信息能直接定位问题。
7. 排查防火墙/安全组限制
- 如果是远程MySQL:确认服务器的防火墙(比如Linux的ufw/iptables)或者云服务商的安全组,已经开放了3306端口,并且允许你的本地IP访问。
- 如果是本地MySQL:检查Windows防火墙或者Linux的防火墙,有没有拦截3306端口的入站/出站请求。
先从这些点逐一排查,大概率能找到问题所在!
内容的提问来源于stack exchange,提问作者user7398455
相关产品推荐
相关产品推荐

