2 案例2 :使用RDB文件恢复数据

2.1 问题
•要求如下: 
•启用RDB 
•设置存盘间隔为120秒 10个key改变存盘 
•备份RDB文件 
•删除数据 
•使用RDB文件恢复数据 
1. 
2. 

2.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:使用RDB文件恢复数据

RDB介绍:

Redis数据库文件,全称Reids DataBase

数据持久化方式之一

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

术语叫Snapshot快照

恢复时,将快照文件直接读到内存里

相关配置参数

文件名

dbfilename “dump.rdb” 文件名

save “” 禁用RDB

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

save 900 1 900秒内且有1次修改

save 300 10 300秒内且有10次修改

save 60 10000 60秒内且有10000修改




01.[root@redisA ~]# redis-cli -h 192.168.4.51 -a 123456 shutdown
02.[root@redisA ~]# vim /etc/redis/6379.conf
03.dbfilename dump.rdb
04.#   save ""        //启用RDB,去掉#号为禁用RDB
05.save 120 10        //120秒内且有1次修改(满足三个条件中的任意一个都会保存)
06.save 300 10
07.save 60 10000
08.
09.[root@redisA ~]# /etc/init.d/redis_6379 start 
10.Starting Redis server...
11.[root@redisA ~]# redis-cli -h 192.168.4.51 -a 123456
12.192.168.4.51:6379>
13.[root@redisA ~]# redis-cli -h 192.168.4.51 -a 123456
14.192.168.4.51:6379> 
15.192.168.4.51:6379> set v1 k1
16.OK
17.192.168.4.51:6379> set v2 k1
18.OK
19.192.168.4.51:6379> set v3 k1
20.OK
21.192.168.4.51:6379> set v4 k1
22.OK
23.192.168.4.51:6379> set v45 k1
24.OK
25.192.168.4.51:6379> set v46 k1
26.OK
27.192.168.4.51:6379> set v7 k1
28.OK
29.192.168.4.51:6379> set v8 k1
30.OK
31.192.168.4.51:6379> set v9 k1
32.OK
33.192.168.4.51:6379> set v10 k1
34.OK
35.192.168.4.51:6379> keys *
36. 1) "v2"
37. 2) "v9"
38. 3) "v10"
39. 4) "v45"
40. 5) "v4"
41. 6) "v1"
42. 7) "v46"
43. 8) "v8"
44. 9) "v7"
45.10) "v3"
46.192.168.4.51:6379>exit



备份数据




01.[root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456 shutdown        //停止服务
02.[root@redisA ~]# cd /var/lib/redis/6379/
03.[root@redisA 6379]# ls
04.dump.rdb  nodes-6351.conf
05.[root@redisA 6379]# cp dump.rdb dump.rdb.bak    //备份dump.rdb,之后删除



删除数据




01.[root@redisA 6379]# rm -rf dump.rdb
02.[root@redisA 6379]# /etc/init.d/redis_6379  start 
03.Starting Redis server...
04.[root@redisA 6379]# ls
05.dump.rdb  dump.rdb.bak  nodes-6351.conf
06.[root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456
07.192.168.4.51:6379> keys *        //已经没有数据
08.(empty list or set)
09.192.168.4.51:6379>



恢复数据




01.[root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456 shutdown
02.[root@redisA 6379]# mv dump.rdb.bak dump.rdb
03.mv: overwrite ‘dump.rdb’? y
04.[root@redisA 6379]# /etc/init.d/redis_6379  start 
05.Starting Redis server...
06.[root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456
07.192.168.4.51:6379> keys *
08. 1) "v7"
09. 2) "v46"
10. 3) "v45"
11. 4) "v8"
12. 5) "v4"
13. 6) "v2"
14. 7) "v1"
15. 8) "v3"
16. 9) "v9"
17.10) "v10"
18.192.168.4.51:6379>



RDB优点:

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

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

RDB的缺点:

意外宕机时,最后一次持久化的数据会丢失
 
3 案例3 :使用AOF文件恢复数据

3.1 问题
•要求如下: 
•启用AOF 
•备份AOF文件 
•删除数据 
•使用AOF文件恢复数据 

3.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:使用AOF文件恢复数据

1)AOF介绍

只做追加操作的文件,Append Only File

记录redis服务所有写操作

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

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

2)参数配置

文件名

appendfilename "appendonly.aof" 指定文件名

appendonly yes 启用aof ,默认no

AOF文件记录写操作的方式

appendfsync always 有新写操作立即记录

appendfsync everysec 每秒记录一次

appendfsync no 从不记录




01.[root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456 shutdown
02.[root@redisA 6379]# rm -rf dump.rdb
03.[root@redisA 6379]# vim /etc/redis/6379.conf
04.appendonly yes            //启用aof,默认no
05.appendfilename "appendonly.aof"    //文件名
06.appendfsync everysec            //每秒记录一次
07.[root@redisA 6379]# vim /etc/redis/6379.conf 
08.[root@redisA 6379]# /etc/init.d/redis_6379  start 
09.Starting Redis server...
10.[root@redisA 6379]# ls            //会出现appendonly.aof文件
11.appendonly.aof  dump.rdb  nodes-6351.conf
12.
13.[root@redisA 6379]# cat appendonly.aof        //无内容
14.[root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456
15.192.168.4.51:6379> set v1 a1
16.OK
17.192.168.4.51:6379> set v2 a2
18.OK
19.192.168.4.51:6379> set v3 a3
20.OK
21.192.168.4.51:6379> set v4 a4
22.OK
23.192.168.4.51:6379> set v5 a5
24.OK
25.192.168.4.51:6379> set v6 a6
26.OK
27.192.168.4.51:6379> set v7 a7
28.OK
29.192.168.4.51:6379> set v8 a7
30.OK
31.192.168.4.51:6379> set v9 a9
32.OK
33.192.168.4.51:6379> set v10 a10
34.OK
35.192.168.4.51:6379> keys *
36. 1) "v2"
37. 2) "v5"
38. 3) "v10"
39. 4) "v9"
40. 5) "v6"
41. 6) "v8"
42. 7) "v3"
43. 8) "v7"
44. 9) "v1"
45.10) "v4"
46.192.168.4.51:6379> exit
47.[root@redisA 6379]# cat appendonly.aof            //有数据



3)使用AOF恢复数据

备份数据




01.[root@redisA 6379]# cp appendonly.aof appendonly.aof.bak
02.[root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456 shutdown



删除数据




01.[root@redisA 6379]# rm -rf appendonly.aof
02.[root@redisA 6379]# /etc/init.d/redis_6379  start 
03.Starting Redis server...
04.[root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456
05.192.168.4.51:6379> keys *
06.(empty list or set)
07.192.168.4.51:6379> exit 



恢复数据




01.[root@redisA 6379]# mv appendonly.aof.bak appendonly.aof
02.mv: overwrite ‘appendonly.aof’? y
03.[root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456 shutdown
04.[root@redisA 6379]# /etc/init.d/redis_6379  start 
05.Starting Redis server...
06.[root@redisA 6379]# redis-cli -h 192.168.4.51 -a 123456
07.192.168.4.51:6379> keys *
08. 1) "v9"
09. 2) "v5"
10. 3) "v8"
11. 4) "v2"
12. 5) "v1"
13. 6) "v4"
14. 7) "v10"
15. 8) "v6"
16. 9) "v7"
17.10) "v3"
18.192.168.4.51:6379>



修复AOF文件,把文件恢复到最后一次的正确操作




01.[root@redisA 6379]# vim appendonly.aof 
02.*2        //可以把这一行删除
03.$6
04.SELECT
05.$1
06.0
07.*3
08.$3
09.set
10.$2
11.v1
12.$2
13.a1
14.*3
15.$3
16....
17.[root@redisA 6379]# redis-check-aof --fix appendonly.aof        //恢复文件
18.0x               0: Expected prefix '*', got: '$'
19.AOF analyzed: size=311, ok_up_to=0, diff=311
20.This will shrink the AOF from 311 bytes, with 311 bytes, to 0 bytes
21.Continue? [y/N]: y
22.Successfully truncated AOF



RDB优点:

可以灵活的设置同步持久化appendfsync always或异步持久化appendfsync verysec

宕机时,仅可能丢失1秒的数据

RDB的缺点:

AOF文件的体积通常会大于RDB文件的体积

执行fsync策略时的速度可能会比RDB慢

 

发表评论

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