MySQL 5.7无法修改事务隔离级别为READ COMMITTED求助
解决MySQL 5.7.41无法设置READ COMMITTED隔离级别的问题
问题说明
你执行SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED后,当前连接的隔离级别不会立刻改变——这个命令只对新创建的连接生效,所以需要重新登录MySQL再查看变量值。如果重启MySQL后又回到REPEATABLE-READ,说明全局配置没被永久保存。
永久修改全局隔离级别(推荐)
- 编辑MySQL配置文件,Ubuntu 18.04下通常是
/etc/mysql/mysql.conf.d/mysqld.cnf,找到[mysqld]段落,添加:transaction-isolation = READ-COMMITTED - 重启MySQL服务:
sudo systemctl restart mysql - 重新登录MySQL,执行以下命令验证:
此时SHOW VARIABLES LIKE "%isolation";transaction_isolation和tx_isolation都应该显示为READ-COMMITTED。
确保Drupal会话级配置生效
如果全局修改暂时无法操作,确认settings.php的配置是否正确:
- 检查
init_commands是否放在正确的数据库数组节点下,示例配置如下:$databases['default']['default'] = [ 'database' => 'your_database_name', 'username' => 'your_db_user', 'password' => 'your_db_pass', 'host' => 'localhost', 'port' => '3306', 'driver' => 'mysql', 'prefix' => '', 'init_commands' => [ 'isolation_level' => 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', ], ]; - 验证会话级别:可以在Drupal中执行自定义SQL查询
SELECT @@transaction_isolation;,确认返回READ-COMMITTED。
排查配置覆盖问题
如果修改my.cnf后还是不生效,检查是否有其他配置文件覆盖了设置:
- 执行
mysqld --help --verbose | grep -A 1 "Default options",查看MySQL启动时加载的所有配置文件顺序,确保修改的是优先级最高的那个。 - 检查
/etc/mysql/conf.d/目录下的其他.cnf文件,是否有重复的transaction-isolation配置。
内容的提问来源于stack exchange,提问作者jwa
相关产品推荐
相关产品推荐

