專案

一般

設定檔

動作

MySQL 設定

當 Redmine 使用 MySQL 5.6、5.7、8.0 和 8.1 作為資料庫後端時,如果對議題巢狀集合進行併發修改(例如,透過平行修改多個議題的 parent_id),則會出現已知問題。更多詳細資訊請參閱議題 #39437 以及與該票證相關的所有議題。

Redmine 5.1.1 或更高版本包含重要的修正程式來緩解此問題(r22458r22459r22460),但這些修正程式也需要將 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 Cormier8 個月 前更新 · 7 個版本