【问题标题】:Restore Redis dump to a different database将 Redis 转储还原到不同的数据库
【发布时间】:2015-08-10 19:23:20
【问题描述】:

如何转储在数据库 0 上运行的 redis 并将其恢复到不同数据库 (8) 上的本地计算机中?

我已经安全地复制了转储文件:

scp hostname@/var/lib/redis/dump.rdb .

但是如果我用这个更改我的本地redis dump.rdb,我会得到数据库0上的数据。我怎样才能将它恢复到特定的数据库?

【问题讨论】:

    标签: redis


    【解决方案1】:

    首先请注意,使用编号/共享的 Redis 数据库是不可取的。您真的应该考虑使用带有单个 DB (0) 的专用 Redis 服务器(更多信息请访问:https://redislabs.com/blog/benchmark-shared-vs-dedicated-redis-instances

    Redis 没有提供一种直接的方法来做到这一点,但是有两种基本的方法可以做到这一点:

    1. 预处理:修改dump.rdb 文件以加载到您选择的数据库中。您可以为此构建一个工具,或者使用现有的工具之一。 Jan-Erik 在 http://rdb.fnordig.de/file_format.html 记录 RDB v7 格式方面做得非常出色,因此您只需更改 Database Selector 字节即可。

    2. 恢复后:在SCANing 的输出上使用MOVE 命令,您恢复的数据库应该很容易编写脚本。

    【讨论】:

    • 实际上我只是在我的开发机器上使用共享服务器,这样我就可以拥有来自不同生产实例的数据。您的第二个选项(还原)将删除我所有的开发数据库,​​所以我将尝试预处理选项。谢谢
    • 由于 Redis 非常轻量级,您可以在开发机器上简单地运行多个 Redis 实例(使用不同的端口)。
    【解决方案2】:

    我最终在 Ruby 中创建了一个脚本来转储和恢复我想要的密钥。 (请注意,这种方法很慢,200 个键大约需要 1 分钟)。

    • 获取转储/恢复的密钥

    ssh hostname redis-cli --scan --pattern 'awesome_filter_pattern*'

    • 打开到生产服务器的 ssh 连接
    • 转储遥控钥匙

    dump = ssh.exec!("redis-cli dump #{key}").chomp

    • 在本地恢复它

    $redis.connection.restore(key, 0, dump)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      相关资源
      最近更新 更多