mysql镜像配置如何设置只读模式_mysql镜像配置只读账户与模式设置方法

启用 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 镜像实例处于安全的只读状态,特别适用于从库或数据分析场景。