You need to enable JavaScript to run this app.
导航
通过 redis-shake 使用 RDB 文件迁移数据
最近更新时间:2024.12.16 14:58:37首次发布时间:2023.04.17 21:19:41

redis-shake 是一款开源的 Redis 数据迁移工具,可以通过 Redis 数据库中的 RDB 文件实现离线数据恢复或迁移。本文介绍如何使用 redis-shake 工具进行 Redis 库间的数据迁移。

适用场景

某些情况下,源 Redis 数据库并未开放 syncpsync 复制权限,因此无法通过火山引擎数据库传输服务 DTS 进行数据迁移。此时,您可以通过 redis-shake 工具使用 RDB 文件,将源 Redis 数据库的全量数据离线迁移至目标 Redis 数据库中。
使用 RDB 文件来迁移数据,可以在不依赖 syncpsync 权限的前提下,将自建 Redis 或第三方云 Redis 数据库的数据迁移至火山引擎缓存数据库 Redis 版。关于 redis-shake 的更多信息,请参见 redis-shake

注意事项

  • 多 DB 迁移场景下,需注意源数据库与目标数据库间的 DB 映射关系,避免出现非预期的数据覆盖。
  • 暂不支持 STREAM 类型数据的迁移。

准备工作

使用 redis-shake 进行数据迁移之前,您需要对目标库和源库完成如下准备工作。

准备工作数据库类型说明
创建 Redis 数据库目标库创建一个缓存数据库 Redis 版实例作为数据迁移的目标数据库。实例创建方法,请参见创建实例

设置 Redis 数据库白名单

  • 目标库

  • 源库

为 Redis 实例设置白名单分组,并将客户端设备 IP 地址加入到实例的白名单中。详细操作步骤,请参见设置白名单

说明

若您的客户端设备和 Redis 实例不在同一个 VPC 内,您还要为 Redis 实例开启公网访问。开启公网访问的方法,请参见开启公网访问

获取数据库连接信息

  • 目标库
  • 源库

您可以参考如下步骤获取缓存数据库 Redis 版连接地址和端口号信息:

  1. 登录 Redis 控制台
  2. 在顶部菜单栏的左上角,选择实例所属的项目和地域。
  3. 实例列表页,单击目标实例名称。
  4. 在实例详情页单击连接管理页签,即可在私网访问公网访问区域查看对应的连接地址和端口号信息。

获取 RDB 备份文件

源库

获取 RDB 备份文件并保存至本地服务器或 ECS 实例上。

说明

  • 本文中以缓存数据库 Redis 版迁移至缓存数据库 Redis 版为例。下载缓存数据库 Redis 版 RDB 文件的具体操作步骤,请参见下载备份文件
  • 若您需要从自建 Redis 数据库获取 RDB 文件,请连接 Redis 数据库并执行 SAVE 命令,即可在 Redis 的安装目录中生成 dump.rdb 文件。
  • 若您需要从其他云 Redis 服务中获取 RDB 文件,请参考如下方式:

操作步骤

  1. 安装 redis-shake 迁移工具。具体步骤如下。

    1. 登录待安装 Redis-cli 的设备,例如 ECS 实例或本地设备。

      说明

      本文操作步骤以在 ECS 服务器中安装 redis-shake 迁移工具为例。

    2. 执行如下命令下载 redis-shake 迁移工具。

      说明

      本文示例中使用的 redis-shake 迁移工具版本为 v2.0.3。

      wget https://github.com/alibaba/RedisShake/releases/download/release-v2.0.3-20200724/redis-shake-v2.0.3.tar.gz
      
    3. 执行如下命令解压 Redis 源码文件。

      tar xzf redis-shake-v2.0.3.tar.gz
      
  2. 执行 cd redis-shake-v2.0.3 命令进入解压后的目录。

  3. 执行 vim redis-shake.conf 命令修改配置文件。需要修改的参数及说明如下。

    参数是否必填说明示例

    target.address

    目标 Redis 数据库的连接地址与端口号。

    说明

    您可以参考准备工作中的操作步骤获取目标Redis 数据库的连接地址与端口号。

    redis-cnlft7yolwd5e****.redis.ivolces.com:6379

    target.password_raw

    目标 Redis 数据库中用于数据迁移的账号密码。

    支持如下几种密码填写格式:

    • 直接填写密码。仅当使用 default 默认账号时支持该格式)。
    • <username>:<password>

    说明

    如果忘记密码,您可以重置密码。具体操作,请参见重置密码

    Pwd@123

    rds_test_acc:Pwd@123

    sourcec.rdb.input备份文件(RDB 文件)的路径,可使用相对路径或绝对路径。/root/redis_shake/redissource.rdb

    target.db

    指定需要将数据恢复到的 DB,默认值为 -1

    • 当该参数值 为 -1 时,表示不指定目标 DB,源 Redis 中各 DB 的数据会恢复到目标 Redis 的对应 DB 中。
        例如,源 Redis 的 RDB 文件中存在 DB0、DB1,那么恢复到目标 Redis 后,源 DB0 和 DB1 的数据会被分别恢复到目标 DB0 和 DB1 中。
    • 如需将源 Redis 中的所有数据都恢复到一个 DB 中,将该参数设置为任意一个自然数即可。
        例如,需要将所有数据恢复到目标 Redis 数据库的 DB10 中,您可以将此参数值设置为 target.db = 10

    10

    key_exists

    当目标 Redis 数据库中存在与 RDB 文件中相同的 Key 时,是否用RDB 文件中的 Key 覆盖目标 Redis 数据库的 Key。取值范围如下:

    • none(默认值):不使用 RDB 文件中的 Key 覆盖目标 Redis 数据库的 Key。
    • rewrite:使用 RDB 文件中的 Key 覆盖目标 Redis 数据库的 Key。
    • ignore:保留目标 Redis 数据库的 Key,忽略 RDB 文件中的 Key。

    说明

    建议对目标 Redis 数据库中的有效数据进行完善的备份后再执行恢复。如该参数设置为 none 且存在数据冲突,数据恢复时会出现异常提示。

    rewrite

    parallel

    迁移 RDB 文件时所使用的并发线程数,可用于提高数据迁移速度。
    最小值为 1,最大值取决于服务器性能。默认值为 64。

    64

  4. 执行如下命令进行数据迁移。

    说明

    您需要在二进制文件 ./redis-shake.linux 和配置文件 redis-shake.conf 所在的目录中执行下述命令。

    ./redis-shake.linux -type=restore -conf=redis-shake.conf
    

    当返回结果中出现如下restore: rdb donerestore from '[备份文件(RDB 文件)的路径]' to '[目标 Redis 数据库的连接地址:端口号]' 信息时,表示数据恢复完成,此时按住 Ctrl+C 键退出迁移任务即可。
    RDB离线迁移成功