Ubuntu环境下Django SQLite数据库迁移MySQL失败求助
解决Django从SQLite迁移到MySQL失败的问题
先别急,我帮你一步步排查这个MySQL迁移的问题。从你给出的配置和报错片段来看,咱们先从最常见的几个坑入手:
1. 确认MySQL驱动已正确安装
Django的MySQL后端依赖mysqlclient库,Python3.6版本需要安装适配的老版本(比如mysqlclient==2.0.3,因为3.6属于较旧的Python版本):
pip install mysqlclient==2.0.3
如果安装失败,先补装系统层面的依赖(以Ubuntu为例):
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
2. 修正settings.py里的数据库配置
你的配置里有两个容易踩的坑:
PORT字段留空了,MySQL默认端口是3306,必须明确指定:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'MasterQuote', 'USER': 'root', 'PASSWORD': 'root', 'HOST': 'localhost', 'PORT': '3306', # 补上默认端口,不能留空 } }- 确保
MasterQuote数据库已经手动创建:Django不会自动帮你建库,登录MySQL命令行执行:
用CREATE DATABASE MasterQuote CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;utf8mb4编码能支持更全的字符(比如emoji),避免后续数据导入时出现编码错误。
3. 验证MySQL用户权限与连接
- 先测试root用户能否正常登录MySQL:
输入密码mysql -u root -proot后如果能进入,再检查该用户是否允许localhost连接:
确保root对应的SELECT user, host FROM mysql.user;host是localhost或者%(允许任意地址连接)。如果是权限问题,可以执行:GRANT ALL PRIVILEGES ON MasterQuote.* TO 'root'@'localhost'; FLUSH PRIVILEGES;
4. 补全报错信息,定位核心问题
你给出的报错回溯只到一半(File "/usr/local/lib/python3.6/dist-packages/djan...),后面的内容才是关键:
- 如果是
No module named 'MySQLdb':说明驱动没装对,回到第一步重新安装mysqlclient; - 如果是
Access denied for user 'root'@'localhost':说明密码错误或者用户没有权限; - 如果是
Unknown database 'MasterQuote':说明数据库没创建。
5. 测试基础连接(排除Django干扰)
写个简单的Python脚本,直接测试MySQL连接,确认不是数据库本身的问题:
import mysql.connector try: conn = mysql.connector.connect( host='localhost', user='root', password='root', database='MasterQuote' ) print("✅ 数据库连接成功!") conn.close() except Exception as e: print(f"❌ 连接失败:{str(e)}")
如果这个脚本连接失败,先解决MySQL本身的问题,再回到Django的迁移步骤。
6. 正确的迁移步骤(从SQLite到MySQL)
如果前面的配置都没问题,按以下步骤迁移数据:
- 先从SQLite导出数据:
python manage.py dumpdata > data.json - 修改
settings.py的数据库配置为MySQL(就是你现在的配置,修正后); - 执行迁移,创建MySQL里的表结构:
python manage.py migrate - 导入之前导出的数据:
python manage.py loaddata data.json
内容的提问来源于stack exchange,提问作者PrakashT
相关产品推荐
相关产品推荐

