4

希望这是一个简单的问题:

我正在尝试将 redis 数据库从一台机器(M1)复制到另一台机器(M2)。两台机器运行相同版本的redis。这就是我所做的:-

  1. 在 M1 上,发出“保存”。据我了解,这会创建我的数据集的时间点磁盘文件。根据我的配置文件(redis.conf),这会写入一个名为“dump.rdb”的文件。

  2. 在 M2 上,我关闭了 redis 并删除了该机器上的 dump.rdb 文件。然后我从 M1-->M2 复制 dump.rdb(到 M2 的 redis.conf 中指定的预期位置)并在 M2 上重新启动 redis 实例。

在 M2 redis 实例上发出一些“hgetall”查询时,没有记录。在 M1 上重复相同的操作会给出预期的正确结果。

我究竟做错了什么 ?

4

4 回答 4

3

你在更高的层次上没有做错任何事。可能您无意中犯了一些错误...确保文件在复制后具有相同的 MD5 和。确保第二个 Redis 配置为使用 dump.rdb 作为持久性方法,而不是 AOF。读取 Redis 日志以检查它是否读取数据库文件。至于你也用同一个数据库号吗?也许您的数据存储在 DB5 上,但您正在查询 DB0?

于 2012-10-16T12:41:03.907 回答
2

我有同样的问题。我最终意识到我从中复制 dump.rdb 的 redis 实例运行的是 2.4.x,但目标 redis 实例运行的是 2.2.x。2.2.x 实例启动时,没有出现无法读取 rdb 文件的警告。但是DBSIZE, INFO,KEYS *等都表示一个空数据库。

一旦我将第二个实例升级到 2.4.x,我就能够按预期打开数据库。我知道你已经说过你的机器运行的是相同的版本,但我想在这里添加它以确保其他人知道如果他们的版本不匹配,他们会看到相同的症状。

于 2013-01-31T23:49:33.017 回答
1

我建议您使用redis-dump进行 redis 备份和恢复

以下是用法:

    $ redis-dump 
    $ redis-dump -u 127.0.0.1:6371 > db_full.json
    $ redis-dump -u 127.0.0.1:6371 -d 15 > db_db15.json

    $ < db_full.json redis-load 
    $ < db_db15.json redis-load -d 15

要安装 redis 转储:

 $ gem install redis-dump
于 2012-10-16T07:01:22.977 回答
0

从 redis 2.6 开始,还有 MIGRATE 语句,您可以使用 COPY 选项运行它:

迁移

我想我会提到这个功能,因为有时您可能只想复制部分数据。

我不会将它用于完整的数据库转储和加载,已经提到的方法更适合这种情况。

于 2014-01-26T22:42:11.330 回答