从具有多个数据库的实例复制单个Redis数据库

时间:2012-08-05 19:25:02

标签: redis database-replication

我有一个Redis实例,它有两个数据库。现在我想设置第二个实例并replicate第一个实例,但第二个实例应该只有一个数据库,并且只从第一个实例复制db 0。 当我尝试这样做时(为第二个实例设置slaveof ...)我在Redis日志文件中收到以下错误消息:

FATAL: Data file was created with a Redis server configured to handle more than 1 databases. Exiting

我尝试使用redis-dump但是当我尝试将生成的转储导入新实例时出现错误。 (与2 dbs和1 db无关,我认为,而不是redis-dump中的一个bug,它仍处于alpha状态。

怎么办?

2 个答案:

答案 0 :(得分:3)

这就是我实现它的方式(在Gurpartap Singh的帮助下):

  • 使用databases 2配置第二个Redis实例,就像第一个
  • 一样
  • 复制第一个实例(请参阅http://redis.io/topics/replication
  • 打开第二个Redis实例的命令行(使用redis-cli)
  • 在Redis CLI上:SELECT 1(选择第二个数据库)
  • 在Redis CLI上:FLUSHDB(删除第二个数据库中的所有键)
  • 在Redis CLI上:SAVE(将数据集保存到磁盘)
  • 退出Redis CLI并停止Redis
  • 将配置更改为databases 1
  • 再次启动Redis

此时你应该有一个只有一个db的正在运行的Redis实例(来自原始Redis实例的db 0)

这里的关键是当我们删除第二个数据库中的所有密钥然后将数据集保存到磁盘时,生成的转储只有一个数据库。 (感谢Gurpartap Singh的暗示)

答案 1 :(得分:1)

据我所知,你有redis实例A,它有db 0和db 1.你想在另一个实例B上复制db 0(可能在另一台机器上 - 但无所谓)。 Redis主要关注完整的实例复制,而不是单独的数据库。

因此,如果您仍想复制db 0而不是db 1,我建议您将db中的任何一个迁移到单独的实例。比如,将db 1迁移到单独的实例,与此复制图无关。然后,您可以为仅具有db 0(实例A)的实例设置主从复制。

以下是有关如何实施redis复制的详细说明:http://redis.io/topics/replication

简而言之,您必须连接到要创建slave的新实例(B),然后发出命令:slaveof redis-master.webapp.com 6379,其中地址和端口指向实例A.然后同步数据并遵循主实例的所有更新。

如果您发现它没有同步数据,您可以使用info命令检查它的同步状态。也可以在master上试一试。日志也有帮助。

希望有所帮助。如果您需要有关设置redis复制的更多信息,请与我们联系。