如何取消Linux数据库只读模式?

操作前关键准备

  1. 备份数据库
    执行任何写操作前,使用以下命令备份(以MySQL为例):

    mysqldump -u [用户名] -p --all-databases > full_backup.sql
  2. 检查只读状态
    登录数据库确认当前状态:

    SHOW VARIABLES LIKE 'read_only';  -- MySQL
    SELECT pg_is_in_recovery();       -- PostgreSQL(返回 f 表示非只读)

**二、取消只读模式的具体步骤

MySQL/MariaDB

方法1:动态修改(无需重启)

SET GLOBAL read_only = OFF;          -- 取消全局只读
SET GLOBAL super_read_only = OFF;    -- 若启用超级只读需额外关闭

方法2:修改配置文件(需重启)
编辑 /etc/my.cnf/etc/mysql/my.cnf

[mysqld]
read_only = OFF          # 删除或设为OFF
super_read_only = OFF    # 同上

重启服务生效:

systemctl restart mysqld

PostgreSQL

步骤:

  1. 结束恢复模式(如主从架构中的从库):
    pg_ctl promote -D /var/lib/pgsql/data/  # 提升从库为主库
  2. 单机环境修改配置:
    编辑 postgresql.conf

    default_transaction_read_only = off  # 确保为off

    重启服务:

    systemctl restart postgresql

Redis

redis-cli
127.0.0.1:6379> CONFIG SET replica-read-only no  # 关闭副本只读
127.0.0.1:6379> CONFIG REWRITE                  # 持久化配置

MongoDB

use admin
db.adminCommand({ setParameter: 1, readOnly: false })  // 取消只读

验证是否成功

  • MySQL
    SHOW VARIABLES LIKE 'read_only';  -- 结果应为 OFF
  • PostgreSQL
    INSERT INTO test_table (col) VALUES ('write_test');  -- 测试写入
  • 通用检查
    观察应用日志或使用监控工具(如Prometheus)确认写操作恢复。

常见问题解决

  1. 权限不足导致失败

    ERROR 1227 (42000): Access denied; need SUPER privilege

    解决方案:使用具有 SUPER 权限的账户操作。

  2. PostgreSQL从库无法取消只读
    需先停止主从同步:

    pg_ctl stop -D /var/lib/pgsql/data/
    rm -f /var/lib/pgsql/data/standby.signal  # 删除触发恢复的信号文件
    pg_ctl start -D /var/lib/pgsql/data/
  3. 配置文件修改后未生效

    • 检查配置路径是否正确:mysql --help | grep "my.cnf"
    • 确认服务重启:systemctl status mysqld

安全建议

  1. 只读场景推荐
    • 从库查询分离时保持只读
    • 数据备份期间启用只读防误操作
  2. 操作后监控
    使用 tophtopvmstat 观察服务器负载,避免突发写入导致资源过载。

重要提示:生产环境操作前必须备份数据并制定回滚方案,如遇复杂架构(如集群、主从复制),建议结合数据库文档操作。


引用说明

  • MySQL 8.0 Reference Manual: read_only System Variable
  • PostgreSQL Documentation: Recovery Configuration
  • Redis Commands: CONFIG SET
  • MongoDB Manual: readOnly Mode

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6375.html

(0)
酷番叔酷番叔
上一篇 2025年7月5日 22:57
下一篇 2025年7月5日 23:59

相关推荐

  • vi真有gdb模式?

    场景1:在gdb中误入vi界面(常见原因)当使用gdb调试时,若通过layout命令启用TUI(文本用户界面)或设置EDITOR=vi,gdb会调用vi风格的界面,退出方法如下:退出gdb的TUI模式按 Ctrl + X, Ctrl + A 组合键(先按Ctrl+X,松开后按Ctrl+A)或执行命令: (gdb……

    3天前
    900
  • 密码和全名这样填安全吗?

    添加用户的两种核心命令useradd 命令(通用)语法:sudo useradd [选项] 用户名常用选项:-m:创建用户家目录(默认位置 /home/用户名)-s /bin/bash:指定登录Shell(如不指定,默认使用/bin/sh)-g 主组名:设置主用户组(需提前存在)-G 附加组名:设置附加组(如……

    2025年7月8日
    1100
  • 为什么你努力却失败,别人轻松成功?

    在Linux系统中配置互信(SSH无密码登录)是管理多台服务器、实现自动化运维的关键技术,以下为详细操作指南,严格遵循OpenSSH官方规范,兼顾安全性与实用性:互信原理通过非对称加密实现身份验证:私钥(~/.ssh/id_rsa):本地保留,需严格保密公钥(~/.ssh/id_rsa.pub):分发到目标服务……

    2025年6月13日
    1300
  • Linux符号链接是什么?如何创建?

    软链接核心命令创建软链接使用 ln -s 命令,语法为:ln -s [目标文件/目录路径] [软链接名称]-s:表示创建软链接(symbolic link)目标路径:原始文件或目录的绝对路径或相对路径软链接名称:新建的链接文件名(可自定义)具体操作步骤创建文件软链接场景:将 /home/user/docs/re……

    2025年6月27日
    1500
  • 如何用命令行快速完成任务?专家推荐高效方法!

    在Linux系统中查看USB设备是硬件管理、故障排查或驱动开发的常见需求,以下介绍多种专业、可靠且安全的方法,涵盖命令行工具和图形界面操作,所有步骤均经过主流Linux发行版(如Ubuntu、Fedora、CentOS)验证,lsusb 命令(最常用)作用:列出所有连接的USB设备及详细信息(厂商ID、产品ID……

    2025年7月9日
    1000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信