基于redis 6.2
Redis备份还原
redis支持rdb和aof两种持久化方式. 默认只开启了rdb
RDB快照
半持久化, 默认已开启, 默认配置基本不需要修改.
#rdb默认的触发持久化的条件
save 900 1
save 300 10
save 60 10000
#rdb快照的文件名
dbfilename dump.rdb
#rdb快照文件保存路径
dir /www/server/redis/
直接备份文件 dump.rdb
获取redis目录(rdb文件存放在这):
CONFIG GET dir
在redis命令下执行 SAVE
, 可立即将内存中的数据写入 dump.rdb
:
redis-cli -h 127.0.0.1 -p 6379 -a 密码 save
注意:
SAVE
命令会立即执行并等待返回结果,BGSAVE
是异步的(不会返回执行结果)
还原
- 停止redis服务
- 复制备份文件
dump.rdb
到redis目录
复制后, 检查一下文件的owner是否是
redis
- 启动redis
如果rdb文件损坏, 会启动失败, 使用 redis-check-rdb dump.rdb
进行修复.
AOF(Append Only File)
全持久化, 比较耗IO, 需要手动开启.
修改配置:
#开启AOF
appendonly yes
- 默认的AOF持久化的文件名是:
appendonly.aof
- 其他配置基本不用修改. 默认的刷新策略是
everysec
, 即每秒写入一次, 宕机后最多丢失一秒的数据.
直接备份文件 appendonly.aof
建议备份前在redis命令下执行 bgrewriteaof
, 发送 异步 重写指令, 可以减少日志尺寸:
redis-cli -h 127.0.0.1 -p 6379 -a 密码 bgrewriteaof
bgrewriteaof
是异步命令, 需要使用info persistence
命令检查aof_rewrite_in_progress
是否为0来确认是否已完整.
还原
- 停止redis服务
- 复制备份文件
appendonly.aof
到redis目录
复制后, 确认一下文件的owner是否是
redis
- 启动redis
如果aof文件损坏, 会启动失败, 使用 redis-check-aof --fix appendonly.aof
进行修复.
注意: 经过测试, redis 6.2 版本的aof会记录
flushall
命令(早前的4.x可能不会记录)
同时开启rdb和aof
在配置文件中同时开启rdb和aof时, 会加载aof文件
如果要打开aof, 建议先使用命令开启, 以同步数据, 然后再修改配置文件 .
开启aof:
127.0.0.1:6379> config set appendonly yes
开启aof之后, 会自动更新持久化文件.
执行aof日志重写(异步的, 需要监控状态):
127.0.0.1:6379> bgrewriteaof
检查持久化状态:
127.0.0.1:6379> info persistence
查看 aof_rewrite_in_progress
属性的信息, 如果值为0则表示当前没有aof重写进程, aof文件更新完成.
手动修改配置文件, 以确保redis重启时开启aof.
命令行操作
#开启aof(运行时, 不会修改配置文件)
redis-cli -h 127.0.0.1 -p 6379 -a 123456 config set appendonly yes
#关闭rdb(运行时, 不会修改配置文件)
redis-cli -h 127.0.0.1 -p 6379 -a 123456 config set save ""
#在拷贝rdb文件前刷新:
redis-cli -h 127.0.0.1 -p 6379 -a 123456 save
批量导入模拟数据:
cat redis_batch.txt | redis-cli -h 127.0.0.1 -p 6379 -a 123456
redis_batch.txt中是redis命令的行, 比如:
set name aben
incr quantity
hset user:1 name aben age 18