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 ~]#