2

我正在使用 Compose for MySQL,它使用MySQL 5.7 Group Replication

尝试使用 Django 1.11.4 进行数据库测试时,我收到有关 rollback_test 的错误(因为它不满足主键的要求)

和 transaction-write-set-extraction!=OFF 要求创建 SAVEPOINTS。

django.db.utils.OperationalError: (1290, 'MySQL 服务器正在使用 --transaction-write-set-extraction!=OFF 选项运行,因此无法执行此语句')

除了测试,一切都很好。

有没有办法告诉 Django 它是一个 Group-Replication MySQL DB 并避免这些特定的测试?

4

1 回答 1

0

在 InnoDB 上使用 Group Replication 需要 transaction-write-set-extraction

MySQL 5.7.19之前的版本不支持 Group Replication 上的保存点。

将本地和生产 MySQL 升级到 5.7.19 或更高版本。

复制:组复制现在支持 SQL 事务 SAVEPOINT。

至于 Django,它在嵌套原子代码时会创建保存点,因此您将来可能会在测试之外遇到这个问题。

当 atomic() 装饰器嵌套时,它会创建一个保存点以允许部分提交或回滚。

此外,您可能需要检查您的生产服务器是否为 InnoDB 集群正确配置

于 2017-08-23T09:34:29.007 回答