V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
diggzhang
V2EX  ›  MySQL

MySQL 库处于完全只读模式该如何设置?

  •  
  •   diggzhang · 2020-07-21 18:48:57 +08:00 · 2358 次点击
    这是一个创建于 1367 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想让一个 MySQL 库处于完全只读模式。

    开启一个 mysql 会话情况下,设置:

    SET GLOBAL read_only = OFF;
    UNLOCK TABLES;
    

    锁库确实生效。

    但是关闭会话后,锁库就失效了。

    问题类似: https://dba.stackexchange.com/questions/116816/flush-tables-with-read-lock-not-working

    有没有办法让该配置永久生效?

    第 1 条附言  ·  2020-07-22 10:04:05 +08:00

    会话内锁库

    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'@'%';
    
    12 条回复    2020-07-22 16:38:51 +08:00
    MinQ
        1
    MinQ  
       2020-07-21 18:55:20 +08:00
    整个新用户,给只读权限?
    realpg
        2
    realpg  
       2020-07-21 18:56:57 +08:00
    弄个用户只给 select 权限就完了
    diggzhang
        3
    diggzhang  
    OP
       2020-07-21 19:00:40 +08:00
    @MinQ @realpg

    此事就痛苦在访问库的用户全是 SUPER 用户。
    MinQ
        4
    MinQ  
       2020-07-21 19:05:32 +08:00
    @diggzhang 这种特别容易出问题啊,哪天来个 SQL 注入就直接把数据库带走了
    XiaoxiaoPu
        5
    XiaoxiaoPu  
       2020-07-21 19:06:10 +08:00
    MySQL 5.7 支持 super_read_only,看看是否满足?
    zjp
        6
    zjp  
       2020-07-21 19:13:20 +08:00 via Android
    用 init-connect 配置执行下
    但是这个需求还有用户全都是管理员 这都不合理啊
    diggzhang
        7
    diggzhang  
    OP
       2020-07-21 19:56:11 +08:00
    @MinQ 我也有点疯...
    @XiaoxiaoPu 看到这个参数有点小开心,然后一对版本号发现我们数据库用的是 5.6
    @zjp 我研究一下
    diggzhang
        8
    diggzhang  
    OP
       2020-07-21 19:57:37 +08:00
    @zjp 我大概懂你思路了
    GM
        9
    GM  
       2020-07-21 20:38:00 +08:00
    弄个主从设置,给他们 slave 机的用户,随便搞
    saulshao
        10
    saulshao  
       2020-07-21 23:21:02 +08:00   ❤️ 1
    正确的做法是修改访问数据库的用户,别的办法都只能算变通措施
    zhangysh1995
        11
    zhangysh1995  
       2020-07-22 15:39:15 +08:00
    楼上正解。
    diggzhang
        12
    diggzhang  
    OP
       2020-07-22 16:38:51 +08:00
    我比较意外的是,`keepalive + mysql` 听起来这么古老的方式,搜不到一篇说得明白,或跟着做下来有用的文档。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5540 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:26 · PVG 11:26 · LAX 20:26 · JFK 23:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.