首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python Django和Mysql。由于Binlog,数据不会插入到MySQL中

问使用python Django和Mysql。由于Binlog,数据不会插入到MySQL中
EN

Stack Overflow用户
提问于 2018-03-16 03:27:53
回答 3查看 1.6K关注 0票数 2

当我使用django来设计一个网站并删除时,我发现如果我使用format:STATEMENT). ( MySQL )来激活Binlog,我会遇到一些麻烦。

下面是我对此部署的设置:

  • 基于Django的网站
  • 乌斯吉
  • 宁克斯
  • MySQL

第一步,我需要将我的模型迁移到数据库,所以我输入如下:

代码语言:javascript
复制
python manage.py migrate

像这样回溯:

代码语言:javascript
复制
    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的这种格式。

EN

回答 3

Stack Overflow用户

发布于 2018-11-27 05:11:18

我遇到了一个类似的问题,并通过将隔离级别更改为“可重复读取”来修复它。您真的只需要它来应用迁移,那么您可能就可以(?)把它移开。在settings.py中,我将数据库设置更改为:

代码语言:javascript
复制
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条目。注意这些风险。

票数 2
EN

Stack Overflow用户

发布于 2018-03-16 13:03:42

您能否尝试将Binlog格式设置为行?

为设置格式,请使用此,

代码语言:javascript
复制
mysql> SET GLOBAL binlog_format = 'ROW';

之后,使用下面的查询来确认

代码语言:javascript
复制
mysql> show variables like 'binlog_format';
票数 1
EN

Stack Overflow用户

发布于 2018-03-17 03:40:17

经过昨天的搜索,我得到了这个问题的一个夏季解决方案。

  • 第一个解决方案:更改Binlog格式。 正如Hariprakash所说,我们可以更改Binlog格式并修复这个问题。在大多数情况下,这是修复它的最佳方法。 您可以通过两种方式更改设置:
    1. Hariprakash方式,但它只影响会话中的设置。当您关闭该会话时,将丢失该会话的集合。
    2. 您可以修改Mysql设置文件my.cnf。 在my.cnf中,您需要添加log_bin=mysql-bin并根据您的选择设置bin_format=ROW或binformat=MIXED。然后,您需要重新启动Mysql服务。这将永远有效。

​

  • 第二个解决方案:更改Mysql的默认存储引擎 在修改默认存储引擎之前,需要检查支持引擎的种类。 show engines; 您可以更改默认存储引擎。
    • 在设置文件my.cnf中,应在[mysqld]之后插入default-storage-engine=INNODB,并记住必须插入server-id=1,此数字用于识别主机。不做使其他主机有相同的编号。
    • 此外,您还可以在5.5.4或更高版本中使用Mysql版本,根据Django文件,它使用MyISAM作为默认存储引擎。

​

虽然有两种方法来解决问题,但我认为没有最好的解决办法。如果有人有更好的答案不修改my.cnf,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49312705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档