操作
MySQL配置¶
Redmine使用MySQL 5.6、5.7、8.0和8.1作为数据库后端时,在并发修改问题嵌套集的情况下(例如,通过并行修改各个问题的parent_id)存在已知问题。更多详细信息可以在问题#39437以及所有与之相关的问题中找到。
Redmine 5.1.1或更高版本包含解决此问题的关键修复(r22458,r22459,以及r22460),但这些修复也需要将transaction_isolation
更改为READ COMMITTED
才能正常工作。根据官方文档,默认的MySQL事务隔离级别是REPEATABLE READ
。对于MySQL版本5.7.20或更早版本,设置是tx_isolation
而不是transaction_isolation
。
至少有两种方法可以持久地设置此设置
1. 修改Redmine数据库配置文件
将以下键variables
和值transaction_isolation: "READ-COMMITTED"
添加到database.yml
配置文件中,如下所示
production:
adapter: mysql2
database: redmine
host: localhost
[...]
variables:
transaction_isolation: "READ-COMMITTED"
2. 在服务器上的MySQL配置文件中更改transaction_isolation
transaction_isolation="READ-COMMITTED"
- 此文件的路径取决于操作系统,例如,在Ubuntu中是
/etc/mysql/conf.d/mysql.cnf
。 - 更改此设置需要重启服务器。如果您不想重启服务器,也可以通过运行以下查询在运行时应用设置:
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
,但为了在重启后持久化设置,也必须在配置文件中进行更改。 - 所有主要的云服务提供商都允许从云管理页面更改此设置。
与对生产系统所做的任何其他更改一样,强烈建议在生产环境中实施此更改之前进行测试。在具有副本的更高级配置中,此更改也可能更改服务器的二进制日志格式,因为只有基于行的二进制日志记录支持READ COMMITTED
隔离级别。
由 Jonathan Cormier 更新 8个月前 · 7次修订