MySQL从库设为只读的核心是防止误操作写入并保障复制稳定,需配置read_only与super_read_only、严格管控用户权限、避免中断复制线程,并辅以内网绑定、日志审计等安全加固措施。

MySQL从库设为只读,核心是防止误操作写入数据,同时确保复制不被干扰。关键在于关闭写权限、禁用用户写操作、并验证复制状态不受影响。
设置从库为只读模式
在从库的 MySQL 配置文件(my.cnf 或 my.ini)中添加以下参数,重启 MySQL 或动态启用:
- read_only = ON:使普通用户无法执行 INSERT/UPDATE/DELETE/CREATE/DROP 等写操作(但对 SUPER 权限用户无效)
- super_read_only = ON(MySQL 5.7.8+):进一步限制 SUPER 用户也无法写入,真正实现全局只读;启用后需用 SET PERSIST super_read_only = OFF 并有 SUPER 权限才能关闭
若不想重启,可在线执行(需有 SUPER 权限):
SET GLOBAL read_only = ON; SET GLOBAL super_read_only = ON;
限制用户写权限
即使启用了 read_only,拥有 SUPER 权限的用户仍可能绕过限制。因此需严格管控账号权限:
- 为应用或监控使用的账号,仅授予 SELECT, REPLICATION CLIENT, SHOW VIEW 等必要权限,禁止 INSERT/UPDATE/DELETE/CREATE/DROP/ALTER
- 撤销高危权限:
REVOKE SUPER ON *.* FROM 'app_user'@'%';
- 检查是否存在无密码或弱密码账号,及时清理或加固
确保复制不被意外中断
只读配置本身不影响复制,但某些操作可能间接导致同步异常:
- 避免在从库执行 STOP SLAVE 后忘记启动;建议用 START SLAVE SQL_THREAD 单独控制 SQL 线程,保留 IO 线程持续拉取 binlog
- 禁止在从库创建临时表(除非明确需要且生命周期可控),因临时表不记录 binlog,但可能干扰业务逻辑判断
- 定期检查 SHOW SLAVE STATUS\G 中的 Seconds_Behind_Master、SQL_Running 和 IO_Running,确认复制健康
补充安全加固建议
只读只是基础,配合其他措施才能提升整体安全性:
- 绑定从库监听地址为内网 IP(bind-address = 192.168.1.100),禁止公网访问
- 启用 skip_name_resolve 避免 DNS 反查延迟与潜在风险
- 开启错误日志和慢查询日志,便于审计异常写尝试(如被拒绝的 UPDATE 请求会记入错误日志)
- 使用 MySQL 8.0+ 的角色(ROLE)机制统一管理只读账号权限,简化授权维护










