我目前有一个live redis服务器运行在一个云实例,我想迁移这个redis服务器到一个新的云实例,并使用该实例作为我的新的redis服务器。如果它是MySQL,我将从旧服务器导出DB并将其导入到新服务器。我该如何用redis做到这一点?

附注:我不指望设置复制。我想完全迁移redis服务器到一个新的实例。


当前回答

也可以使用SLAVEOF命令迁移数据:

SLAVEOF old_instance_name old_instance_port

检查您是否收到带有keys *的钥匙。你也可以用任何其他方法测试这个新实例,当你完成时,只需打开replication of:

SLAVEOF NO ONE

由于Redis 5.0推荐使用REPLICAOF,因为SLAVEOF已弃用-请参阅手册

其他回答

我发现导出/备份Redis数据(创建转储文件)的简单方法是通过命令行启动一个服务器,并创建一个动态副本,如下所示(假设源Redis在端口6379上是1.2.3.4):

/usr/bin/redis-server --port 6399 --dbfilename backup_of_master.rdb --slaveof 1.2.3.4 6379

如果您在服务器之间有连接,最好将新实例作为从节点设置复制(与SQL不同,这很简单),然后您可以用一个命令将新节点切换到主节点,并且无需停机时间。

我还想做同样的事情:将一个db从一个独立的redis实例迁移到另一个redis实例(redis哨兵)。

因为数据不是关键(会话数据),我将尝试https://github.com/yaauie/redis-copy。

也可以使用SLAVEOF命令迁移数据:

SLAVEOF old_instance_name old_instance_port

检查您是否收到带有keys *的钥匙。你也可以用任何其他方法测试这个新实例,当你完成时,只需打开replication of:

SLAVEOF NO ONE

由于Redis 5.0推荐使用REPLICAOF,因为SLAVEOF已弃用-请参阅手册

现在,您还可以使用MIGRATE,从2.6开始提供。

我必须使用这个,因为我只想移动一个数据库中的数据,而不是所有数据库中的数据。这两个Redis实例位于两台不同的机器上。

如果你不能从Redis-1直接连接到Redis-2,使用ssh端口绑定:

 ssh user@redis-2.foo.com -L 1234:127.0.0.1:6379

一个小脚本,使用keys循环所有键并迁移每个键。这是Perl,但希望您能理解:

 foreach ( $redis_from->keys('*') ) {

    $redis_from->migrate(
        $destination{host},    # localhost in my example
        $destination{port},    # 1234
        $_,                    # The key
        $destination{db},
        $destination{timeout} 
    );
 }

更多信息请参见http://redis.io/commands/migrate。