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 資料庫設定檔
在 database.yml
設定檔中新增金鑰 variables
,並在其下方新增 transaction_isolation: "READ-COMMITTED"
,如下所示
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 個版本