云服务器redis数据持久化
RDB:
将内存中Redis存储的数据定期以快照的形式存储到硬盘
拍照片
AOF:
记录Redis曾经执行过的所有的写操作到文本文件
写日记
#编译安装Redis
[root@server55~]#lsredis-4.0.8.tar.gz
redis-4.0.8.tar.gz
[root@server55~]#yum-yinstallgcc
[root@server55~]#tar-xfredis-4.0.8.tar.gz
[root@server55~]#cdredis-4.0.8/
[root@server55redis-4.0.8]#make&&makeinstall
[root@server55redis-4.0.8]#./utils/install_server.sh#一路回车
...
Installationsuccessful!
[root@server55redis-4.0.8]#cd
[root@server55~]#
#Redis服务初始化
[root@server55~]#ss-pantul|grepredis
tcpLISTEN0128127.0.0.1:6379*:*users:(("redis-server",pid=4672,fd=6))
[root@server55~]#
RDB测试##查看RDB相关配置
[root@server55~]#vim/etc/redis/6379.conf
[root@server55~]#sed-rn'219,221p;254p;264p'/etc/redis/6379.conf
save9001#900s内有1个变量变化
save30010#300s内有10个变量变化
save6010000#60s内有10000个变量变化
dbfilenamedump.rdb#rdb文件名
dir/var/lib/redis/6379#rdb文件存储位置
[root@server55~]#
##验证触发RDB存储的3种情况
#手工触发
[root@server55~]#ls/var/lib/redis/6379/#确认Redis数据目录为空
[root@server55~]#redis-clisave#save指令触发(阻塞)
OK
[root@server55~]#ls/var/lib/redis/6379/#确认rdb文件生成
dump.rdb
[root@server55~]#rm-rf/var/lib/redis/6379/*#清理rdb文件
[root@server55~]#redis-clibgsave#bgsave指令触发(非阻塞)
Backgroundsavingstarted
[root@server55~]#ls/var/lib/redis/6379/#确认rdb文件生成
dump.rdb
[root@server55~]#
#服务重启触发
[root@server55~]#rm-rf/var/lib/redis/6379/*#清理rdb文件
[root@server55~]#/etc/init.d/redis_6379restart#重启Redis服务
[root@server55~]#ls/var/lib/redis/6379/#确认rdb文件生成
dump.rdb
[root@server55~]#
#变化规则触发
[root@server55~]#rm-rf/var/lib/redis/6379/*#清理rdb文件
[root@server55~]#redis-clikeys\*
(emptylistorset)
[root@server55~]#vimgendata.sh#编写脚本
[root@server55~]#catgendata.sh
#!/bin/bash
foriin{1..10001}
do
key=name$i
value=zs$i
redis-cliset${key}${value}&>/dev/null
done
[root@server55~]#bashgendata.sh#执行脚本生成数据
[root@server55~]#ls/var/lib/redis/6379/#确认rdb文件生成
dump.rdb
[root@server55~]#
##利用rdb文件恢复数据
[root@server55~]#cp/var/lib/redis/6379/dump.rdb/opt/#备份rdb文件
[root@server55~]#redis-cliflushall#清空Redis数据库模拟数据损坏
OK
[root@server55~]#redis-clibgsave#触发持久化存储
Backgroundsavingstarted
[root@server55~]#redis-clikeys\*#数据被清空
(emptylistorset)
[root@server55~]#/etc/init.d/redis_6379stop#停止服务
[root@server55~]#cp/opt/dump.rdb/var/lib/redis/6379/#rdb文件数据还原
cp:overwrite‘/var/lib/redis/6379/dump.rdb’?y
[root@server55~]#/etc/init.d/redis_6379start#启动服务器加载rdb文件
[root@server55~]#redis-clikeys\*#确认数据恢复
1)"name9813"
2)"name5207"
3)"name5300"
...
#清理测试数据
[root@server55~]#redis-cliflushall
OK
[root@server55~]#redis-clibgsave
Backgroundsavingstarted
AOF测试##查看aof相关配置
[root@server55~]#sed-rn'673p;677p;702,704p'/etc/redis/6379.conf
appendonlyno
appendfilename"appendonly.aof"
#appendfsyncalways
appendfsynceverysec
#appendfsyncno
[root@server55~]#
#启用aof配置
[root@server55~]#redis-cli
127.0.0.1:6379>CONFIGSETappendonlyyes#命令行做服务配置
OK
127.0.0.1:6379>CONFIGREWRITE#回写到配置文件
OK
127.0.0.1:6379>exit
[root@server55~]#cat/etc/redis/6379.conf|grep^appendonly#确认回写结果
appendonlyyes
[root@server55~]#
#测试aof记录
[root@server55~]#ls/var/lib/redis/6379/#确认生成aof文件
appendonly.aofdump.rdb
[root@server55~]#cat/var/lib/redis/6379/appendonly.aof#查看文件内容,此时为空
[root@server55~]#redis-cliseta1#存入数据
OK
[root@server55~]#redis-clisetb2
OK
[root@server55~]#redis-clisetc3
OK
[root@server55~]#cat/var/lib/redis/6379/appendonly.aof#查看文件内容,此时不为空
*2
$6
SELECT
$1
0
*3
$3
set
$1
a
$1
1
*3
$3
set
$1
b
$1
2
*3
$3
set
$1
c
$1
3
[root@server55~]#
#测试aof文件恢复数据
[root@server55~]#cp/var/lib/redis/6379/appendonly.aof/opt/#备份aof文件
[root@server55~]#redis-cliflushall#清空数据
OK
[root@server55~]#/etc/init.d/redis_6379stop#停止服务
[root@server55~]#rm-rf/var/lib/redis/6379/*#清理已有aof文件
[root@server55~]#cp/opt/appendonly.aof/var/lib/redis/6379/#拷贝备份aof文件
[root@server55~]#/etc/init.d/redis_6379start#启动服务
[root@server55~]#redis-clikeys\*#确认数据恢复
1)"b"
2)"c"
3)"a"
[root@server55~]#
#aof文件修复
[root@server55~]#/etc/init.d/redis_6379stop#停Redis服务
[root@server55~]#echoaaaaaa>>/var/lib/redis/6379/appendonly.aof#模拟aof文件损坏
[root@server55~]#/etc/init.d/redis_6379start#启Redis服务
[root@server55~]#ss-pantul|grepredis#服务启动失败
[root@server55~]#tail-1/var/log/redis_6379.log#查看日志内容
49447:M28May17:50:50.742#Badfileformatreadingtheappendonlyfile:makeabackupofyourAOFfile,thenuse./redis-check-aof--fix
[root@server55~]#redis-check-aof--fix/var/lib/redis/6379/appendonly.aof#修复aof文件
0x68:Expectedprefix'*',got:'a'
AOFanalyzed:size=111,ok_up_to=104,diff=7
ThiswillshrinktheAOFfrom111bytes,with7bytes,to104bytes
Continue?[y/N]:y#输入y确认
SuccessfullytruncatedAOF
[root@server55~]#/etc/init.d/redis_6379start#启动服务(报错pid文件已存在)
/var/run/redis_6379.pidexists,processisalreadyrunningorcrashed
[root@server55~]#rm-rf/var/run/redis_6379.pid#删除空的pid文件
[root@server55~]#/etc/init.d/redis_6379start#启动服务
StartingRedisserver...
[root@server55~]#ss-pantul|grepredis
tcpLISTEN0128127.0.0.1:6379*:*users:(("redis-server",pid=49486,fd=6))
[root@server55~]#redis-clikeys\*#确认数据恢复
1)"b"
2)"c"
3)"a"