redis的备份和还原

基于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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章