zoukankan      html  css  js  c++  java
  • 【Redis运行状态下切换RDB备份至AOF备份】

    "redis持久化方式有哪些?又有何区别?

    1. rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能。
    2. aof:以追加的方式记录redis操作日志的文件,可最大程度的保证redis数据安全,类似于mysql的binlog。

    本文将在redis5.0.2版本中,通过CONFIG SET命令,达到不重启redis服务的情况下,从RDB存储模式切换至AOF存储模式。

    确保redis版本在2.2以上

    [root@master redis5]# redis-server -v
    Redis server v=5.0.2 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=55a56548bc97ef03
    

    redis当前的配置文件如下

    # pid文件路径
    pidfile /var/run/redis/6380.pid
    
    # 日志级别
    loglevel notice
    
    # redis数据存放位置
    dir /usr/local/redis5/db/6380/
    
    # 日志文件路径
    logfile /var/log/redis/6380.log
    
    # redis3.0之后的安全模式
    # 安全模式可能会阻挡远程连接,可给redis设置密码解决这个问题
    protected-mode yes 
    
    # reids密码
    requirepass redis_password
    
    
    """重点配置:重点在下面的配置"""
    
    # 指定本地数据库文件名,其存储的数据为二进制类型
    dbfilename dump.rdb
    
    # 指定在多长时间内,有多少次更新操作才将数据同步到数据文件,redis默认提供了3个条件:
    save 900 1
    save 300 10
    save 60 10000
    # 其分别为:
    # save 900 1 每900秒内有1个修改记录时转存
    # save 300 10 每300秒内有10个修改记录时转存
    # save 60 10000 每60秒内有10000修改记录时转存
    

    可以看到,我们的当前实验环境为rdb持久化存储模式

    开始切换
    .
    登陆redis-cli插入些数据,并手动持久化:

    192.168.43.149:6380> set k1 v1
    OK
    192.168.43.149:6380> set k2 v2
    OK
    192.168.43.149:6380> save
    OK
    

    安全起见,我们备份RDB数据:

    [root@master redis5]# cp /usr/local/redis5/db/6380/dump.rdb /opt/
    
    

    此时,再进入redis-cli,执行如下命令,开启AOF持久化:

    # 开启AOF功能
    192.168.43.149:6380> CONFIG set appendonly yes
    OK
    # 关闭RDB功能
    192.168.43.149:6380> CONFIG set save ''
    OK
    

    确保数据库中的key数量正确:

    192.168.43.149:6380> keys *
    1) "k2"
    2) "k1"
    

    开启AOF模式后,会自动生成appendonly.aof持久化文件:

    [root@master redis5]# ls /usr/local/redis5/db/6380/
    appendonly.aof  dump.rdb
    

    此时进入redis-cli的操作,都会被记录,且追加到appendonly.aof文件中,以达到持久化的目的。

    192.168.43.149:6380> set k3 v3
    OK
    

    此时RDB已经正确切换至AOF,注意还得修改redis配置文件,添加AOF设置,不然重启后,通过config set的配置将丢失。

    修改配置文件,使AOF模式永久生效
    .
    将上面展示的redis配置文件中标记的"重点配置"的配置项替换为下面的配置项:

    appendonly no
    appendfsync everyses
    

    appendonly no 指定是否在每次更新操作后进行日志记录
    ·
    redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内> 的数据丢失
    因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内> 只存在于内存中
    .
    appendfsync everyses 指定更新日志的条件
    此配置有3个可选值:
    no:等待操作系统进行数据缓存同步到磁盘(快)
    always:每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
    everysec:每秒同步一次(折衷,默认值)
    "

  • 相关阅读:
    Linux 文件 目录结构探索
    实践 : Ubuntu 上 Testlink 部署
    Linux 查找安装包所在目录的常用方法
    selenium + python 测试环境搭建 (WINDOWS)
    EntityFramework 学习 一 Entity Framework结构体系
    castle windsor学习-------Container Events 容器的事件
    castle windsor学习----ComponentModel construction contributors
    castle windsor学习----- CastleComponentAttribute 特性注册
    castle windsor学习-----Inline dependencies 依赖
    castle windsor学习-----Registering components by conventions
  • 原文地址:https://www.cnblogs.com/zyk01/p/11376472.html
Copyright © 2011-2022 走看看