当我使用django设计一个网站并进行delopy时,我发现如果我使用MySQL,Binlog被激活(格式:STATMENT),我会遇到一些麻烦。
我对此部署的设置:
- 基于 Django 的网站
- uwsgi
- 宁克斯
- MySQL
第一步,我需要将模型迁移到数据库,所以我输入如下:
python manage.py migrate
像这样的回溯:
django.db.utils.OperationalError: (1665, 'Cannot execute statement: impossible
to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table
uses a storage engine limited to row-based logging. InnoDB is limited to row-
logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.')
在网上搜索后,我知道解决这个问题的一种方法是更改 Binlog 格式,这对我来说非常有效。
但是如果我不想更改 Binlog 配置,我仍然想知道如何修复它。我认为Django可以支持这种格式的Binlog。
最佳答案
我遇到了类似的问题,并通过将隔离级别更改为“可重复读取”来修复它。您实际上只需要它来应用迁移,然后您可能(?)将其删除。在 settings.py 中,我将 DATABASES 设置更改为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_name',
'USER': 'db_user',
'PASSWORD': 'db_password',
'HOST': 'db_host',
'PORT': 'db_port',
'CONN_MAX_AGE': db_conn_max_age,
'OPTIONS': {
'isolation_level': "repeatable read",
},
}
}
然后运行python manage migrate
,然后删除OPTIONS
条目。关注these risks .
关于python - 使用 python Django 和 Mysql。由于Binlog,数据不会插入MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49312705/