直接告诉你答案: 使用aof日志恢复, 如何恢复,听我慢慢道来.
一. 场景
某次你连接公司的redis服务器, 玩得太HI,一不小心尝试了一下flushall命令. 再使用keys *命令, 返回为空.此时你是不是背后发冷汗, 身体不听使唤的在抖动.跟网络抖动一样,哈哈
或者是这样的场景, 遇到了传说中的删库跑路者, 做为高级程序员, 你该如何应对?
image.png莫慌, 你的救世主来了!!!
二.操作步骤
1. 开启aof日志功能
- 首先你的redis必须是开启aof日志的.
大约在redis.conf 699行 将appendonly no
改为appendonly yes
-
查看是否已经开启AOF日志功能
image.png
2. 修改appendonly.aof文件
-
查看appendonly.aof文件在哪儿?
image.png - 查看我们有多少个KEY
> dbsize
O(1)操作, 查看有多少个key
> keys *
O(n)操作, 查看所有key - 打开appendonly.aof文件,找到flushall或flushdb命令进行删除.(不仅仅只是删除flushall或flushdb字样,必须要删除上面二行的编码格式行.)
*3
$3
set
$5
fsadf
$4
1243
*1
$8
flushall
- 删除flushall字样和前面二行(*1 $8),如果只删除flushall,redis无法解析aof文件,导致无法启动redis服务.
3. 正常关闭redis.
127.0.0.1:6379>shutdown nosave
4. 重启redis
redis-server redis.conf
三. 验证以上步骤
光说不练假把式, 咱们真刀真枪干一下就知道这玩意好使不.
-
添加测试数据
添加测试数据 -
查看appendonly.aof文件变化与大小变化
查看appendonly.aof - 使用flushall删除所有数据,查看dbsize为0, 再关闭
shutdown nosave
准备重启前需要编辑appendonly.aof
flushall删除 - 注意shutdown 后有两个参数, save是表示进行RDB保存数据,nosave是不进行保护数据.在这里无论是使用哪种都不影响AOF方式恢复数据的.redis重启恢复步骤: 先全量加载rdb文件,然后再加载appendonly.aof文件
-
删除appendonly.aof里的flushall和flushdb关键字. 以便恢复数据.
image.png - 重启恢复数据(终于恢复啦, 可以松一口气啦, 出去吃一顿.补补身子)
image.png
网友评论