想让一个 MySQL 库处于完全只读模式。
开启一个 mysql 会话情况下,设置:
SET GLOBAL read_only = OFF;
UNLOCK TABLES;
锁库确实生效。
但是关闭会话后,锁库就失效了。
问题类似: https://dba.stackexchange.com/questions/116816/flush-tables-with-read-lock-not-working
有没有办法让该配置永久生效?
会话内锁库
SET GLOBAL read_only = ON;
FLUSH TABLES WITH READ LOCK;
解锁
SET GLOBAL read_only = OFF;
UNLOCK TABLES;
在一些主从配置教程中说可以通过调用命令行方式设置锁库是无效的。 在会话结束后,锁库隐式语句也就失效。
最终采取办法是,如何有临时锁库的需求,暂时重置用户权限:
REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%';
grant select on *.* to 'root'@'%';
1
MinQ 2020-07-21 18:55:20 +08:00
整个新用户,给只读权限?
|
2
realpg 2020-07-21 18:56:57 +08:00
弄个用户只给 select 权限就完了
|
5
XiaoxiaoPu 2020-07-21 19:06:10 +08:00
MySQL 5.7 支持 super_read_only,看看是否满足?
|
6
zjp 2020-07-21 19:13:20 +08:00 via Android
用 init-connect 配置执行下
但是这个需求还有用户全都是管理员 这都不合理啊 |
7
diggzhang OP |
9
GM 2020-07-21 20:38:00 +08:00
弄个主从设置,给他们 slave 机的用户,随便搞
|
10
saulshao 2020-07-21 23:21:02 +08:00 1
正确的做法是修改访问数据库的用户,别的办法都只能算变通措施
|
11
zhangysh1995 2020-07-22 15:39:15 +08:00
楼上正解。
|
12
diggzhang OP 我比较意外的是,`keepalive + mysql` 听起来这么古老的方式,搜不到一篇说得明白,或跟着做下来有用的文档。
|