5

我有一个具有两个数据库的 Redis 实例。现在我想设置第二个实例并复制第一个实例,但是第二个实例应该只有一个数据库并且只从第一个实例复制 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 中的一个错误,它仍处于 alpha 阶段。

该怎么办?

4

2 回答 2

5

这就是我实现它的方式(在 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

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

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

于 2012-08-18T13:25:18.600 回答
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

简而言之,您必须连接到您想要成为从属的新实例 (B),然后发出命令:slaveof redis-master.webapp.com 6379,其中地址和端口指向实例 A。然后它将同步数据并跟踪来自的所有更新主实例。

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

希望有帮助。如果您需要有关设置 redis 复制的更多信息,请告诉我。

于 2012-08-12T02:41:32.680 回答