如何从多个 RDB 文件中恢复 Redis

问题描述 投票:0回答:1

多个rdb文件来自不同的redis服务器。现在我想将数据文件合并到单个 redis 服务器。到目前为止,我只找到了使用单个 dump.rdb 文件进行恢复的答案。

redis recovery
1个回答
6
投票

从 Redis 6.0 开始

DEBUG RELOAD
redis-cli
命令有一个新的
NOSAVE
选项,它将从 RDB 文件中获取数据(不会用内存转储覆盖它,也不需要停止
redis-server
)。

DEBUG RELOAD [MERGE] [NOFLUSH] [NOSAVE]

将 RDB 保存在磁盘上并重新加载到内存中。默认情况下它会 保存 RDB 文件并将其加载回来。

使用

NOFLUSH
选项加载新数据库之前不会删除当前数据库,但是 密钥冲突将导致服务器异常终止。

MERGE
是 使用,冲突的键将被加载(加载的 RDB 文件中的键 会赢)。

使用

NOSAVE
时,服务器不会保存当前 加载前 RDB 文件中的数据集.

使用

DEBUG RELOAD NOSAVE
时 你只想加载你放在 Redis 工作中的 RDB 文件 目录以替换内存中的当前数据集。

当你想添加内容时使用

DEBUG RELOAD NOSAVE NOFLUSH MERGE
当前RDB文件放在Redis当前目录下,与 当前内存内容。

验证Redis时使用

DEBUG RELOAD
能够将当前数据集持久化到 RDB 文件中,刷新 内存内容,并将其加载回去。”,

以上内容摘自

debug.c
,应用友好格式(Redis 7.0见debug.c源)。

因此,如果要确保不同 RDB 中没有重复键,请使用

DEBUG RELOAD NOSAVE NOFLUSH
。使用
DEBUG RELOAD NOSAVE NOFLUSH MERGE
如果你知道你有重复,加载最后一个你想要占上风。

注意:Redis 6.0 之前的版本(没有 NOSAVE 选项,请参阅 debug.c source for Redis 5.0)

DEBUG RELOAD
总是以使用内存转储覆盖文件开始,这是静默失败的一个例子,因为
redis-cli
将接受
DEBUG RELOAD
之后的任何不存在的选项,不仅是“可能的”选项,例如
NOSAVE
,而且还完全是人为的,例如
NOSAVING FAILS IN REDIS50
)。

© www.soinside.com 2019 - 2024. All rights reserved.