Drupal 的 Database Isolation Level READ-COMMITTED 问题,根据 Drupal 官方说的,如果直接运行 SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED; 这个命令,虽然管用,但是 MariaDB 一重启,就失效了,还得再次设置,所以应该把配置直接写入 MairaDB 的配置文件,另外,不建议写到 Drupal 配置文件里面,因为那样的话,每次页面请求都会额外触发数据库请求。

根据 MariaDB 的配置文件里面说的,~/.my.cnf 是最后用户级别的配置,可以覆盖前面好几个,

# The MariaDB/MySQL tools read configuration files in the following order:
# 0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read.
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.

但是实际情况是不管用,以为是没有在配置里包括这个目录的原因,可是在 include 里写上这个目录后,反而会出错,无法重启。
最终,只好在 /etc/mysql/mariadb.conf.d/ 下面新建了一个 88-overwrite.cnf 文件,在里面单独写入了配置,重启后生效了,而且在机器重启后,依然管用。

/etc/mysql/mariadb.conf.d/88-overwrite.cnf 写入下面的配置就行了。注意,Drupal 官网里面是:

[mysqld]
transaction_isolation="READ-COMMITTED"

这个和 MariaDB 官网里面说的不一样,我们以 MariaDB 官方的为主,应该写成下面这样子,配置名称用的是 - 而不是 _,后面的值不需要加 “"。

[mariadb]
transaction-isolation = READ-COMMITTED

【❗注意:】上面配置文件覆盖路径是 Ubuntu 下的,Fedora 的 MariaDB 配置貌似比较简单,只有 /etc/my.cnf/etc/my.cnf.d 目录下几个简单的配置文件,所以我们在 my.cnf.d 下面新建一个 99-server-override.cnf 文件,里面写上上面的配置,即可实现配置覆盖,重启 MariaDB 后实测可以。

[go@wild ~]$ cd /etc/my.cnf.d/
[go@wild my.cnf.d]$ ll -Z
total 20
-rw-r--r--. 1 root root unconfined_u:object_r:mysqld_etc_t:s0   49 Jul 28 19:55 99-server-override.cnf
-rw-r--r--. 1 root root system_u:object_r:mysqld_etc_t:s0      763 Jul  4  2010 enable_encryption.preset
-rw-r--r--. 1 root root system_u:object_r:mysqld_etc_t:s0      232 Jul  4  2010 mysql-clients.cnf
-rw-r--r--. 1 root root system_u:object_r:mysqld_etc_t:s0     1080 Jul  4  2010 server.cnf
-rw-r--r--. 1 root root system_u:object_r:mysqld_etc_t:s0      120 Jul  4  2010 spider.cnf
[go@wild my.cnf.d]$