› 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 · Jul 21, 2020 · 3301 views
    This topic created in 2291 days ago, the information mentioned may be changed or developed.

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

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

    SET GLOBAL read_only = OFF;
    UNLOCK TABLES;
    

    锁库确实生效。

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

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

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

    Supplement 1  ·  Jul 22, 2020

    会话内锁库

    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 replies  •  2020-07-22 16:38:51 +08:00
    MinQ
        1
    MinQ  
       Jul 21, 2020
    整个新用户,给只读权限?
    realpg
        2
    realpg  
       Jul 21, 2020
    弄个用户只给 select 权限就完了
    diggzhang
        3
    diggzhang  
    OP
       Jul 21, 2020
    @MinQ @realpg

    此事就痛苦在访问库的用户全是 SUPER 用户。
    MinQ
        4
    MinQ  
       Jul 21, 2020
    @diggzhang 这种特别容易出问题啊,哪天来个 SQL 注入就直接把数据库带走了
    XiaoxiaoPu
        5
    XiaoxiaoPu  
       Jul 21, 2020
    MySQL 5.7 支持 super_read_only,看看是否满足?
    zjp
        6
    zjp  
       Jul 21, 2020 via Android
    用 init-connect 配置执行下
    但是这个需求还有用户全都是管理员 这都不合理啊
    diggzhang
        7
    diggzhang  
    OP
       Jul 21, 2020
    @MinQ 我也有点疯...
    @XiaoxiaoPu 看到这个参数有点小开心,然后一对版本号发现我们数据库用的是 5.6
    @zjp 我研究一下
    diggzhang
        8
    diggzhang  
    OP
       Jul 21, 2020
    @zjp 我大概懂你思路了
    GM
        9
    GM  
       Jul 21, 2020
    弄个主从设置,给他们 slave 机的用户,随便搞
    saulshao
        10
    saulshao  
       Jul 21, 2020   ❤️ 1
    正确的做法是修改访问数据库的用户,别的办法都只能算变通措施
    zhangysh1995
        11
    zhangysh1995  
       Jul 22, 2020
    楼上正解。
    diggzhang
        12
    diggzhang  
    OP
       Jul 22, 2020
    我比较意外的是,`keepalive + mysql` 听起来这么古老的方式,搜不到一篇说得明白,或跟着做下来有用的文档。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1584 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 17:44 · PVG 01:44 · LAX 10:44 · JFK 13:44
    ♥ Do have faith in what you're doing.