Django从SQLite迁移至MySQL失败求助
Django替换SQLite为MySQL后无法启动的排查方案
以下是针对问题的具体排查步骤:
确认MySQL服务状态
先检查MySQL服务是否正在运行:- Linux系统执行:
systemctl status mysql,如果未运行,用systemctl start mysql启动 - Windows系统打开「服务」面板,找到MySQL服务,确认状态为「正在运行」
- Linux系统执行:
测试数据库连接有效性
直接用MySQL命令行工具测试连接,执行:mysql -u admin -p -h 127.0.0.1 -P 3306 auth输入密码后如果无法连接,说明用户权限或数据库存在问题:
- 确认数据库
auth已创建:登录MySQL后执行SHOW DATABASES;查看 - 重新授权用户:执行
注意:GRANT ALL PRIVILEGES ON auth.* TO 'admin'@'127.0.0.1' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;127.0.0.1是TCP连接方式,和localhost的socket连接权限是分开的,必须单独授权
- 确认数据库
修正settings.py的语法问题
你的配置中注释写法错误,Python中"""是多行字符串而非注释,会导致字典语法错误,修正后配置如下:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'auth', 'USER': 'admin', 'PASSWORD': 'password', 'HOST': '127.0.0.1', # localhost not working (Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)) 'PORT': '3306', } }检查mysqlclient兼容性
确认mysqlclient版本与Django版本匹配:- 执行
pip show mysqlclient查看当前版本 - Django 4.x+要求mysqlclient 2.0.3以上,版本不兼容时执行
pip install mysqlclient==2.2.0(或对应兼容版本)重新安装
- 执行
查看详细错误日志
启动服务器时增加日志 verbosity 级别,获取更详细的错误信息:python manage.py runserver --verbosity 3根据日志中的具体报错信息定位问题(比如权限不足、端口占用、数据库不存在等)
内容的提问来源于stack exchange,提问作者Bolofo
相关产品推荐
相关产品推荐

