Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从具有多个数据库的实例复制单个Redis数据库_Redis_Database Replication - Fatal编程技术网

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

从具有多个数据库的实例复制单个Redis数据库,redis,database-replication,Redis,Database Replication,我有一个Redis实例,它有两个数据库。现在我想设置第二个实例和第一个实例,但是第二个实例应该只有一个数据库,并且只从第一个实例复制db 0。 当我试着做这件事的时候。。。对于第二个实例,我在Redis日志文件中得到以下错误消息: FATAL: Data file was created with a Redis server configured to handle more than 1 databases. Exiting 我尝试使用,但在尝试将生成的转储导入新实例时出错。我认为这与2d

我有一个Redis实例,它有两个数据库。现在我想设置第二个实例和第一个实例,但是第二个实例应该只有一个数据库,并且只从第一个实例复制db 0。 当我试着做这件事的时候。。。对于第二个实例,我在Redis日志文件中得到以下错误消息:

FATAL: Data file was created with a Redis server configured to handle more than 1 databases. Exiting
我尝试使用,但在尝试将生成的转储导入新实例时出错。我认为这与2dbs和1db无关,而是redis dump中的一个bug,它仍然在alpha中


怎么办?

据我所知,您有redis实例A,它有db 0和db 1。您希望跨另一个实例B(可能在单独的计算机上)复制db 0,但这无关紧要。Redis主要关注完整的实例复制,而不是单独的数据库

因此,如果您仍然希望复制db 0,而不是db 1,我建议您将其中任何一个db迁移到单独的实例。与此类似,将db 1迁移到独立于此复制关系图的单独实例。然后,您可以为只有db 0实例a的实例设置主从复制

以下是有关如何实现redis复制的详细说明:

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

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


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

这是我在Gurpartap Singh的帮助下实现的:

使用数据库2配置第二个Redis实例,就像第一个一样 复制第一个实例,请参见 使用Redis cli打开第二个Redis实例的命令行 在Redis CLI上:选择1选择第二个数据库 在Redis CLI上:FLUSHDB删除第二个数据库中的所有密钥 在Redis CLI上:保存将数据集保存到磁盘 退出Redis CLI并停止Redis 将配置更改为数据库1 重新启动Redis 此时,您应该有一个正在运行的Redis实例,与原始Redis实例相比只有一个db 0


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

redis无法实现部分主从复制。如果要为某个数据库进行复制,则应将额外的数据库移动到单独的实例中。@GurpartapSingh能否在回答中详细说明如何进行复制?谢谢你的回答,但这并没有真正的帮助。这样写的话,如果您仍然希望复制db 0,而不是db 1,我建议您将这两个db中的任何一个迁移到单独的实例。与此类似,将db 1迁移到独立于此复制关系图的单独实例。这正是我的问题!如何仅迁移单个数据库?一种简单的方法是通过复制再次克隆实例。i、 e.使单独实例成为实例a的从属实例;同步完成后,让它不受任何人的影响。之后,您可以从单独的实例中删除db 0,从实例A中删除db 1。这是一种简单、简单、可靠的减少停机时间的方法。我一定很胖,我还是不明白。假设我有一个单独的实例,它是从实例A复制来的。我将它设置为“不为任何人服务”。此时它有两个dbs。你能一步一步地解释一下我是如何从那种情况发展到只有一分贝的情况的吗?如何从实例中删除一个数据库?使用“选择0”选择一个数据库,使用“刷新数据库”刷新它。选择一个数据库并调用“刷新数据库”将删除该数据库中的所有键,而不是数据库本身。我感谢你的努力,但我希望其他用户也能参与进来,回答我最初的问题。