NoSQL之redis---RDB与AOF

Redis数据库文件,全称RedisDataBase

redis支持数据的永久存储,在服务运行过程中,会定期的内存了的数据复制到硬盘文件里存储。

  --数据持久化方式之一

  --数据持久化默认方式

  --按照指定时间间隔,将内存中的数据集快照写入硬盘

RDB优点与缺点

优点:高性能的持久化实现,创建一个子进程来执行持久化,将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件;过程中主进程不做任何IO操作

  比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合

缺点

  意外宕机时,丢失最后一次持久化的所有数据

定义RDB文件名

dbfilename "dump.rdb"

使用RDB文件恢复数据

备份数据

备份dump.rdb文件到其他位置

cp  数据库目录/dump.rdb  备份文件

恢复数据

  --拷贝备份文件到数据库目录,启动redis服务

cp  备份目录/dump.rdb  数据库目录/

使用备份的dump.rdb文件恢复数据
192.168.4.50:6350> keys *
1) "teaname"
2) "str"
3) "student"
4) "nb"
5) "y"
6) "z"
7) "x"
192.168.4.50:6350> save
OK
192.168.4.50:6350> exit
[root@host50 ~]# cp /var/lib/redis/6379/dump.rdb 
[root@host50 ~]# ls /opt/
dump.rdb  mysql.bak  mysql.tar.gz
[root@host50 ~]#

> flushall  #数据误删除

[root@host50 ~]# redis-cli -h 192.168.4.50 -p 6350 -a 123456 shutdown
[root@host50 ~]# ls /var/lib/redis/6379/
dump.rdb
[root@host50 ~]# rm -rf /var/lib/redis/6379/dump.rdb 
[root@host50 ~]# 
[root@host50 ~]# cp /opt/dump.rdb  /var/lib/redis/6379/
[root@host50 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host50 ~]# 

验证存盘频率实验
[root@host50 ~]# redis-cli -h 192.168.4.50 -p 6350 -a 123456 shutdown
[root@host50 ~]# ls /var/lib/redis/6379/
dump.rdb
[root@host50 ~]# rm -rf /var/lib/redis/6379/dump.rdb 
[root@host50 ~]# 
[root@host50 ~]# ls /var/lib/redis/6379/
[root@host50 ~]# 
[root@host50 ~]# vim /etc/redis/6379.conf
save 900 1
#save 300 10
save 120 10
save 60 10000
:wq

优化设置

数据从内存保存到硬盘的频率

#存盘频率 
219:save 900 1
220:save 300 10
221:save 60 10000

#手动存盘
save  //阻塞写存盘
bgsave  //不阻塞写存盘

AOF介绍

  --追加方式记录写操作的文件

  --记录redis服务所有写操作  

  --不断的将新的写操作,追加到文件的末尾

  --默认没有启用

  --使用cat命令就可以查看文件内容

启用AOF

> config  set appendonly yes    //启用
> config rewrite                    //写进配置文件

使用AOF文件恢复数据:

1:备份数据

备份appendonly.aof文件到其他位置

cp  数据库目录/appendonly.aof  备份目录

2:恢复数据

  拷贝备份文件到数据库目录

  启动redis服务

cp  备份目录/appendonly.aof  数据库目录

 /etc/redis/redis_6379  start

192.168.4.50:6350> config set  appendonly yes
OK
192.168.4.50:6350> config rewrite
 
[root@host50 ~]# ls /var/lib/redis/6379/
appendonly.aof  dump.rdb
[root@host50 ~]# wc -l /var/lib/redis/6379/appendonly.aof 
82 /var/lib/redis/6379/appendonly.aof

    通过备份的aof文件恢复数据
[root@host50 ~]# cp /var/lib/redis/6379/appendonly.aof /opt/    
    
[root@host50 ~]# scp  /opt/appendonly.aof  192.168.4.51:/root/

 在51主机使用aof文件恢复数据,具体操作如下:
[root@host51 ~]# redis-cli  -h 192.168.4.51 -a 123456 shutdown
[root@host51 ~]# vim /etc/redis/6379.conf 
673 appendonly yes
677 appendfilename "appendonly.aof"
:wq
[root@host51 ~]# cp /root/appendonly.aof /var/lib/redis/6379/
[root@host51 ~]# ls /var/lib/redis/6379/
appendonly.aof  dump.rdb
[root@host51 ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@host51 ~]#        
[root@host51 ~]# redis-cli  -h 192.168.4.51 -a 123456 
192.168.4.51:6379> keys *

与AOF相关的配置

#aof记录命令的方式             
                # appendfsync always     时时记录
                  appendfsync everysec    1秒=1000毫秒
                # appendfsync no

#对aof文件做瘦身计划

auto-aof-rewrite-percentage 100 再次对文件做瘦身的比例值

auto-aof-rewrite-min-size 64mb 首次瘦身的最大值

修复损坏aof文件

echo “范德萨发卡戴珊解放军拉斯法”  >> /var/lib/redis/6379/appendonly.aof   //损坏文件
  794  redis-cli -h 192.168.4.50 -p 6350 -a 123456 shutdown  //停止服务
 
  796  /etc/init.d/redis_6379 start      //启服务

]# tail  /var/log/redis_6379.log        //查看日志

 19483:M 03 Jun 17:55:34.218 # Bad file format reading the append only file: 
 make a backup of your AOF file, then use ./redis-check-aof --fix <filename>
 
[root@host50 ~]# redis-check-aof --fix /var/lib/redis/6379/appendonly.aof   //输入日志提供的命令
0x             1a2: Expected prefix '*', got: 'i'                //有些情况下此命令不能修复aof文件
AOF analyzed: size=463, ok_up_to=418, diff=45
This will shrink the AOF from 463 bytes, with 45 bytes, to 418 bytes
Continue? [y/N]: y
Successfully truncated AOF
[root@host50 ~]#
原文地址:https://www.cnblogs.com/ahaocloud/p/14726144.html