希望这是一个简单的问题:
我正在尝试将redis数据库从一台计算机(M1)复制到另一台计算机(M2)。两台机器都运行相同版本的redis。这是我的工作: -
在M1上,发出“保存”。据我了解,这会创建我的数据集的时间点磁盘文件。根据我的配置文件(redis.conf),这会写入名为“dump.rdb”的文件。
在M2上我关闭redis并删除该机器上的dump.rdb文件。然后我将dump.rdb从M1 - > M2复制(到M2的redis.conf中指定的预期位置)并重新启动M2上的redis实例。
在M2 redis实例上发出一些“hgetall”查询时,没有记录。在M1上重复相同的操作会得到预期的正确结果。
我做错了什么?
答案 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文件。但DBSIZE
,INFO
,KEYS *
等都表示空数据库。
将第二个实例升级到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选项运行:
我以为我会提到这个功能,因为有时你可能只想复制部分数据。
我不会将它用于完整的数据库转储和加载,已经提到的方法对于该场景更好。