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

6

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


我会尝试的第一件事是:使用rdb启动服务器,使用config set禁用rdb aof preample,使用config set启用aof,并等待aof被写入(某些redis版本需要bgrewriteaof来触发它)。对于所有的rdb文件都要这样做,中间重命名aof文件。之后,只需将所有aof文件连接在一起,并使用启用aof的redis配置加载它。 - Tw Bert
1个回答

9
从Redis 6.0开始,DEBUG RELOAD redis-cli命令增加了一个新的NOSAVE选项,该选项将会从一个RDB文件中导入数据(而不覆盖它的内存转储,并且无需停止redis-server)。

DEBUG RELOAD [MERGE] [NOFLUSH] [NOSAVE]

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

使用 NOFLUSH 选项在加载新数据库之前不会删除当前数据库,但是键冲突会导致服务器异常。

当使用 MERGE 时,将加载冲突的键(加载的 RDB 文件中的键将获胜)。

当使用 NOSAVE 时,服务器在加载之前不会将当前数据集保存到 RDB 文件中

当您只想加载 Redis 工作目录中放置的 RDB 文件以替换内存中的当前数据集时,请使用 DEBUG RELOAD NOSAVE

当您想要将 Redis 当前目录中的当前 RDB 文件内容与当前内存内容合并时,请使用 DEBUG RELOAD NOSAVE NOFLUSH MERGE

当您想要验证 Redis 能够将当前数据集持久化到 RDB 文件中、刷新内存内容并重新加载时,请使用 DEBUG RELOAD

以上内容摘自debug.c,应用友好格式(请参见Redis 7.0的debug.c源代码)。

因此,如果您想确保不同RDB中没有重复的键,请使用DEBUG RELOAD NOSAVE NOFLUSH。如果您知道有重复项,请使用DEBUG RELOAD NOSAVE NOFLUSH MERGE,加载最后一个您想要优先的。

注意:早于6.0版本的Redis(没有NOSAVE选项,请参见Redis 5.0的debug.c源代码DEBUG RELOAD始终从内存转储文件开始,这是一个静默失败的示例,因为redis-cli会接受DEBUG RELOAD之后的任何不存在的选项,而不仅仅是“可能”的选项,例如NOSAVE,还包括完全牵强附会的选项,例如NOSAVING FAILS IN REDIS50)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接