启用 read_only 和 super_read_only 参数并创建只读账户,可确保 MySQL 镜像实例处于安全只读状态,适用于从库或数据分析场景。

MySQL 镜像配置只读模式,通常用于主从复制架构中的从库(Slave),防止数据被意外修改。设置方式包括启用数据库实例的只读模式以及创建只读账户,两者结合使用更安全。下面详细介绍如何在 MySQL 镜像中配置全局只读模式和只读用户。
启用 MySQL 全局只读模式
在从库上启用 read_only 可防止普通用户执行写操作。只有拥有 SUPER 或 SYSTEM_VARIABLES_ADMIN 权限的用户才能绕过该限制。
通过 SQL 命令开启只读模式:
SET GLOBAL read_only = ON;
若需持久化设置,避免重启后失效,应在 MySQL 配置文件中添加:
[mysqld] read_only = 1
对于 Docker 部署的 MySQL 镜像,可在启动容器时挂载自定义配置文件,或通过环境变量方式注入配置。
配置 super_read_only(增强安全性)
即使设置了 read_only,拥有 SUPER 权限的用户仍可写入。为彻底禁止写操作,建议同时启用:
SET GLOBAL super_read_only = ON;
该设置会阻止 SUPER 用户执行写操作,进一步提升从库安全性。同样可写入配置文件永久生效:
[mysqld] read_only = 1 super_read_only = 1
创建只读数据库账户
除了实例级只读,还应为应用创建权限受限的只读账号,遵循最小权限原则。
创建一个只能查询的用户示例:
CREATE USER 'readonly'@'%' IDENTIFIED BY 'your_password'; GRANT SELECT ON your_database.* TO 'readonly'@'%'; FLUSH PRIVILEGES;
如需限制连接来源,可将 '%' 替换为具体 IP 或内网网段。避免授予 INSERT、UPDATE、DELETE、DROP 等写权限。
Docker 环境下的配置方法
若使用官方 MySQL 镜像部署,可通过挂载配置文件实现开机自动启用只读:
- 创建配置文件
my.cnf:
[mysqld] read_only = 1 super_read_only = 1
- 启动容器时挂载配置:
docker run -d \ --name mysql-slave \ -v /path/to/my.cnf:/etc/mysql/conf.d/readonly.cnf \ -e MYSQL_ROOT_PASSWORD=secret \ mysql:8.0
配置文件放在 /etc/mysql/conf.d/ 目录下会自动加载。
基本上就这些。通过开启 read_only 和 super_read_only 参数,并配合只读账户,能有效保障 MySQL 镜像实例处于安全的只读状态,特别适用于从库或数据分析场景。










