redis数据库还原显示没有记录

时间:2012-10-16 06:58:06

标签: redis

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

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

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

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

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

    我做错了什么?

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

我遇到了完全相同的问题。我最终意识到我复制了dump.rdb的redis实例正在运行2.4.x,但目标redis实例运行的是2.2.x.当2.2.x实例启动时,没有警告无法读取rdb文件。但DBSIZEINFOKEYS *等都表示空数据库。

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

答案 2 :(得分: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-dump:

 $ gem install redis-dump

答案 3 :(得分:0)

自redis 2.6以来,还有MIGRATE语句,您可以使用COPY选项运行:

MIGRATE

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

我不会将它用于完整的数据库转储和加载,已经提到的方法对于该场景更好。