You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:41:31