我正在研究我的第一个Django项目,并且我一直在达到sqlite的极限。所以我决定在添加大量额外测试数据之前切换到MySQL。自从我的Django应用程序中的页面不再加载(管理员和项目页面都没有)。在Chrome最终显示" ERR_CONNECTION_REFUSED"之前,我没有收到任何错误消息。
我在设置中添加了以下内容:
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_name',
'USER': 'user',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {
'read_default_file': os.path.join(BASE_DIR, 'my.cnf'),
},
上面引用的my.cnf文件如下所示:
[client]
database = dbname
user = username
password = password
default-character-set = utf8
[mysqld]
max_allowed_packet = 512M
wait_timeout = 604800
interactive_timeout = 28800
它被定义使用,因为更改文件中的数据库名称会导致Django连接到不同的数据库。
该项目使用Celery,因此我还修改了Celery结果后端:
CELERY_RESULT_BACKEND = 'db+mysql://user:password@localhost:3306/dbname'
Django可以连接到数据库(参见这样的测试:how can I check database connection to mysql in django)。我根据此问题的第二个答案迁移了我的内容:What's the best way to migrate a Django DB from SQLite to MySQL?没有任何错误。所有数据都存在于phpMyAdmin中。 MySQL错误日志中没有任何内容。 Django和Celery都没有在调试控制台/命令行中输出任何错误。我安装了mysqlclient和(对于Celery)SQLAlchemy。
切换回原来的sqlite配置可以解决问题,因此它肯定与MySQL数据库相关联。我在俯瞰什么?我错过了一些重要的配置步骤吗?有没有办法获得更多错误消息?尤其是完全缺乏后者真的让我感到茫然。
尝试从数据库中获取对象bia Python控制台导致´mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away')
,这再一次指向MySQL问题。关闭旧连接修复了此错误,该错误到目前为止尚未重新出现,但页面仍然无法加载。