将 35GB 的 redis 从一个实例复制到另一个实例的最快方法(在 Azure 标准中)
Fastest way to copy 35GB of redis from one instance to another (in Azure standard)
我们在 Azure 上有两个 Azure Redis 实例。来源位于 Azure 中的 "standard" 设置中。我们需要将所有 35GB 从标准版本复制到高级版本(不迁移)。
最好的方法是什么?数据应该是静态的。您不能以标准方式导出数据,也不能分片。我们已经达到最大大小,需要移动到支持分片的大小。
1。编辑配置文件
在目标 Redis 的配置文件中设置
slaveof sourceIP sourcePort
slave-read-only no
它将通过传输 RDB 文件有效地将源数据库复制到您的新数据库中。然后您可以注释掉这些行并关闭源实例。请注意,目标实例中的旧密钥不会被保留也不会被重写。
2。 CONFIG SET 命令
不会在这个悲伤的故事上帮助你。
127.0.0.1:6371> CONFIG SET slaveof "localhost 6370"
(error) ERR Unsupported CONFIG parameter: slaveof
3。 MIGRATE 命令
MIGRATE remotehost remoteport "" 0 5000 COPY KEYS *
也不行。但有一个解决方法:
redis-cli --raw KEYS '*' | xargs redis-cli MIGRATE my.redis 6379 "" 0 5000 KEYS
(如果你用过,请给那个人点赞)
4。 Shell 脚本
这是一个将 KEYS
输出通过管道传输到 MIGRATE
并添加一些其他功能的脚本:https://gist.github.com/nicStuff/ee7feb8eed00174a46db42812545b403
5。 RDB 下载
即使您无权访问服务器上的文件,也可以使用 Redis 协议下载 RDB 转储:
redis-cli -h <host> -p <port> --rdb /path/to/local/copy/dump.rdb
我们在 Azure 上有两个 Azure Redis 实例。来源位于 Azure 中的 "standard" 设置中。我们需要将所有 35GB 从标准版本复制到高级版本(不迁移)。
最好的方法是什么?数据应该是静态的。您不能以标准方式导出数据,也不能分片。我们已经达到最大大小,需要移动到支持分片的大小。
1。编辑配置文件
在目标 Redis 的配置文件中设置
slaveof sourceIP sourcePort
slave-read-only no
它将通过传输 RDB 文件有效地将源数据库复制到您的新数据库中。然后您可以注释掉这些行并关闭源实例。请注意,目标实例中的旧密钥不会被保留也不会被重写。
2。 CONFIG SET 命令
不会在这个悲伤的故事上帮助你。
127.0.0.1:6371> CONFIG SET slaveof "localhost 6370"
(error) ERR Unsupported CONFIG parameter: slaveof
3。 MIGRATE 命令
MIGRATE remotehost remoteport "" 0 5000 COPY KEYS *
也不行。但有一个解决方法:
redis-cli --raw KEYS '*' | xargs redis-cli MIGRATE my.redis 6379 "" 0 5000 KEYS
(如果你用过,请给那个人点赞)
4。 Shell 脚本
这是一个将 KEYS
输出通过管道传输到 MIGRATE
并添加一些其他功能的脚本:https://gist.github.com/nicStuff/ee7feb8eed00174a46db42812545b403
5。 RDB 下载
即使您无权访问服务器上的文件,也可以使用 Redis 协议下载 RDB 转储:
redis-cli -h <host> -p <port> --rdb /path/to/local/copy/dump.rdb