如何将Redis数据库从一台服务器移动到另一台服务器?

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

PS:我不打算设置复制。 我想完全迁移redis服务器到一个新的实例。

通过从命令行运行BGSAVESAVE将数据库的一个spanshot保存到dump.rdb中。 这将在与redis服务器相同的文件夹中创build一个名为dump.rdb的文件。 查看所有服务器命令的列表。

将此dump.rdb复制到您要迁移到的其他redis服务器。 当redis启动时,它会查找这个文件来初始化数据库。

首先,在服务器A上创build一个转储

 A$ redis-cli 127.0.0.1:6379> CONFIG GET dir 1) "dir" 2) "/var/lib/redis/" 127.0.0.1:6379> SAVE OK 

这确保了dump.rdb是完全最新的,并向我们显示了它的存储位置(在这种情况下是/var/lib/redis/dump.rdb )。 dump.rdb也会定期自动写入磁盘。

接下来,将其复制到服务器B:

 A$ scp /var/lib/redis/dump.rdb myuser@B:/tmp/dump.rdb 

停止B上的Redis服务器,复制dump.rdb(确保权限与以前相同),然后启动。

 B$ sudo service redis-server stop B$ sudo cp /tmp/dump.rdb /var/lib/redis/dump.rdb B$ sudo chown redis: /var/lib/redis/dump.rdb B$ sudo service redis-server start 

B上的Redis版本必须大于或等于A,否则您可能遇到兼容性问题 。

如果你有服务器之间的连接,最好是build立与新的实例作为从属节点的复制(这是微不足道的,这是微不足道的) – 那么你可以用一个命令切换新的节点为主,零停机。

不pipe信不信,我只是为它写了一篇文章:

http://redis4you.com/articles.php?id=005&name=Seamless+migration+from+one+Redis+server+to+another

但是,我怎么知道主从机之间的数据传输是否完成? 您可以使用INFO命令。

现在你也可以使用MIGRATE,自2.6起可用。

我不得不使用这个,因为我只想把数据移到一个数据库中,而不是全部。 两个Redis实例存在于两台不同的机器上。

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

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

使用KEYS和MIGRATE每个键循环所有键的小​​脚本。 这是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了解更多信息。;

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

 SLAVEOF old_instance_name old_instance_port 

检查你是否收到钥匙KEYS * 。 你也可以用其他的方式来testing新的实例,当你完成之后,只需要复制:

 SLAVEOF NO ONE 

要在导入redis数据时检查dump.rdb的放置位置,

启动客户端

 $redis-cli 

然后

 redis 127.0.0.1:6379> CONFIG GET * 1) "dir" 2) "/Users/Admin" 

这里/ Users / Admin是从服务器读取的dump.rdb的位置,因此这是必须被replace的文件。

你也可以使用rdd

它可以转储和恢复正在运行的redis服务器,并允许筛选器/匹配/重命名转储键

我也想做同样的事情:将数据库从独立的redis实例迁移到另一个redis实例(redis sentinel)。

由于数据并不重要(会话数据),我会尝试https://github.com/yaauie/redis-copy

我刚刚向npm和github发布了一个命令行界面实用程序,允许您将匹配给定模式(甚至*)的密钥从一个Redis数据库复制到另一个。

你可以在这里find这个工具:

https://www.npmjs.com/package/redis-utils-cli

零停机迁移的关键要素是:

简而言之:

  1. 设置一个目标redis(空)作为一个源redis的奴隶(与您的数据)
  2. 等待复制完成
  3. 允许写入目标redis(目前是从属)
  4. 切换您的应用程序到一个目标redis
  5. 等待从主机到从机完成数据stream
  6. 把一个目标redis从主人转到奴隶

此外,redis有一些选项可以禁止源redis在分离目标后立即接受写入:

  • min-slaves-to-write
  • min-slaves-max-lag

这个主题覆盖

来自RedisLabs团队的非常好的解释https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration

甚至他们的互动工具迁移: https : //github.com/RedisLabs/redis-migrate

redis-dump终于为我工作了。 它的文档提供了一个示例如何转储Redis数据库并将数据插入到另一个数据库中。