You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django连接MySQL执行migrate报错(2006,<NULL>)求解决方案

解决Django连接MySQL时出现的(2006, )错误

我来帮你排查这个困扰你的问题,django.db.utils.OperationalError: (2006, <NULL>)本质是Django无法稳定连接到MySQL服务,常见原因集中在服务状态、连接配置、驱动兼容性这几个方面,咱们一步步来解决:

1. 先确认MySQL服务是否正常运行

这是最容易忽略的点,先检查你的本地MySQL服务有没有启动:

  • Windows:打开「服务」面板(Win+R输入services.msc即可打开),找到MySQL服务,确认状态是「正在运行」,如果没启动就右键启动它。
  • 也可以直接在终端尝试登录MySQL:mysql -u root -p,输入密码后如果能成功进入,说明服务正常;如果登录失败,先解决MySQL本身的启动问题。

2. 确认目标数据库已创建

你的settings.py里配置的NAME是django_01,要确保这个数据库已经在MySQL中存在:
登录MySQL后执行:

CREATE DATABASE django_01 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

用utf8mb4字符集是为了兼容emoji等特殊字符,避免后续出现编码问题。

3. 尝试修改HOST为127.0.0.1

把settings.py里的HOST从localhost改成127.0.0.1,强制使用TCP连接:

'HOST': '127.0.0.1',

有时候localhost会优先使用socket连接,可能出现权限或路径问题,换成IP地址能避免这类情况。

4. 检查MySQL的连接超时参数

MySQL默认的wait_timeout如果设置得过短,会导致Django的连接被主动断开。登录MySQL后执行:

SHOW VARIABLES LIKE 'wait_timeout';

如果返回的值小于3600(比如默认的600秒),建议修改配置文件:

  • Windows:找到MySQL安装目录下的my.ini
  • Linux/macOS:找到/etc/my.cnf或/etc/mysql/my.cnf
    在文件中添加或修改:
wait_timeout = 36000
interactive_timeout = 36000

修改后重启MySQL服务,再尝试执行python manage.py migrate。

5. 检查MySQL驱动的兼容性

Django 2.1默认依赖MySQLdb,但这个库对MySQL 8.0+版本支持不好,且Windows环境下安装可能有编译问题,建议换成更兼容的驱动:

选项A:使用mysqlclient

先卸载旧的MySQLdb,然后安装mysqlclient:

pip uninstall MySQL-python
pip install mysqlclient

(Windows用户如果安装失败,可以下载对应版本的预编译.whl文件,本地用pip install xxx.whl安装)

选项B:使用pymysql

如果mysqlclient安装有困难,可以用pymysql替代:

pip install pymysql

然后在Django项目根目录的__init__.py文件中添加以下代码:

import pymysql
pymysql.install_as_MySQLdb()

这样Django会把pymysql当作MySQLdb来使用。

6. 排查防火墙/杀毒软件拦截

有时候本地防火墙或者杀毒软件会拦截3306端口的连接,暂时关闭防火墙和杀毒软件,再尝试执行migrate命令,如果能成功,再去配置防火墙允许MySQL的3306端口通信。

按照上面的步骤一步步排查,应该能解决这个连接问题。

内容的提问来源于stack exchange,提问作者FocusYou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:03:14