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]$