设置MariaDB为只读后仍可写入,如何无需重启Spring Boot立即生效?
解决MariaDB设置只读后Spring Boot应用仍可写入的问题
你之前的操作未生效,核心原因有两点:一是read_only默认不对超级用户生效,二是已建立的数据库连接不会自动触发新的只读限制。以下是可实现即时生效的方案:
1. 启用全用户只读限制
执行这条命令,让只读规则覆盖所有用户(包括拥有SUPER权限的用户),这是关键补充:
SET GLOBAL super_read_only = 1;
搭配完整的只读配置命令:
FLUSH TABLES WITH READ LOCK; SET GLOBAL read_only = 1; SET GLOBAL super_read_only = 1;
2. 终止现有写连接
Spring Boot应用可能持有已建立的写连接,这类连接不受新配置影响,需要手动终止:
首先查询当前活跃的写连接(替换为你的数据库名):
SELECT id, user, host, db, command FROM information_schema.processlist WHERE command IN ('Query', 'Execute') AND db = '你的数据库名';
然后逐个杀掉这些连接(替换连接ID):
KILL 连接ID;
若需批量处理,可生成批量KILL命令后执行:
SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE command IN ('Query', 'Execute') AND db = '你的数据库名';
3. 验证只读状态
执行以下命令确认配置已生效:
SHOW GLOBAL VARIABLES LIKE 'read_only'; SHOW GLOBAL VARIABLES LIKE 'super_read_only';
两个变量的值均应为ON。
补充说明
FLUSH TABLES WITH READ LOCK仅锁定表的写操作,但不会断开现有连接,必须配合终止写连接才能让应用立即无法写入。- 若应用使用连接池,新创建的连接会自动继承只读规则,无需额外操作。
内容的提问来源于stack exchange,提问作者Prem
相关产品推荐
相关产品推荐

