云数据库Redis支持通过控制台执行数据恢复,除此以外,您还可以通过本文提供的脚本文件下载实例的备份文件,然后自动调用redis-port将备份文件恢复至指定的实例中。

前提条件

  • 源Redis实例的大版本为2.8或4.0版本。
  • 目标Redis实的大版本为2.8、4.0或5.0版本。

背景信息

redis-port是一款开源的数据批量传输工具,可用于Redis数据库间的数据传输。本案例通过redis-port的restore模式,将备份文件恢复至指定的Redis实例。

准备工作

注意 由于本案例提供的脚本文件需要通过密钥AccessKey(AK)信息来完成认证并获取源实例的备份文件,为避免阿里云账号泄露AccessKey带来的安全风险,建议您通过RAM用户来完成授权和AccessKey的创建。
  1. 创建RAM用户并授予其AliyunKvstoreFullAccess权限(管理云数据库Redis实例的权限)。
    1. 登录RAM控制台
    2. 创建RAM用户
    3. 在左侧导航栏,选择人员管理 > 用户
    4. 找到目标RAM用户,单击其操作列的添加权限
      图 1. 添加权限
      添加权限
    5. 在对话框的文本框中输入AliyunKvstoreFullAccess,然后单击选择搜索结果中的权限策略名称。
      图 2. 授予AliyunKvstoreFullAccess权限
      授予AliyunKvstoreFullAccess权限
    6. 单击确定
    7. 单击完成
  2. 为RAM用户创建访问密钥AccessKey(AK),详情请参见创建AccessKey

操作步骤

  1. 根据redis-port待安装的位置,完成下述操作:
    注意
    • 下表中的Redis实例包含源Redis实例和目标Redis实例,即源和目标Redis实例均需要完成下述操作。
    • 推荐在ECS实例上安装redis-port,通过专有网络连接源和目标Redis实例,可获得更低的网络延迟和更高的安全性。
    redis-port待安装位置 需完成的操作
    ECS实例
    1. 确保ECS实例与Redis实例属于同一专有网络(即实例基本信息中的专有网络ID一致)。
      说明 如果专有网络不同,您需要更换ECS实例所属的专有网络。具体操作,请参见 更换ECS实例的VPC
    2. 获取ECS实例的内网IP地址。具体操作,请参见查询ECS实例的IP地址
    3. 将ECS实例的内网IP地址添加至Redis实例的白名单中。具体操作,请参见设置IP白名单
    本地设备
    1. Redis实例默认仅提供内网连接地址,通过公网连接时您需要手动申请公网连接地址。具体操作,请参见申请公网连接地址
    2. 在本地设备上执行curl ipinfo.io |grep ip命令,获取其公网IP地址,返回示例如下:查看公网IP结果
    3. 将本地设备的公网IP地址添加至Redis实例的白名单中。具体操作,请参见设置IP白名单
  2. 登录待安装redis-port的设备,例如ECS实例或本地设备。
    说明 本文以ECS实例(Ubuntu 16.04.6操作系统)为例,介绍操作流程。
  3. 依次执行下述命令安装OpenAPI相关依赖:
    apt-get update
    apt install python-pip -y
    pip install --upgrade "pip < 21.0"
    pip install aliyun-python-sdk-core
  4. 执行下述命令下载脚本文件
    wget 'https://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/120287/cn_zh/1618924922413/redis-rdb-auto-restore.tar'
    说明 脚本文件包含脚本程序( rdb_restore.py)及redis-port等文件,运行该脚本程序可下载指定实例的备份文件,然后自动调用 redis-port将备份文件恢复至指定的实例中。
  5. 执行下述命令解压下载的脚本文件:
    tar -xvf redis-rdb-auto-restore.tar
  6. 依次执行下述命令进入解压后的目录并修改配置文件:
    cd redis-rdb-auto-restore
    vim config.json
    说明 执行命令后,系统将进入编辑界面,输入 a可进入编辑模式。
    表 1. 参数说明
    参数 说明 示例值
    acesskeyID 填入RAM用户的AccessKeyId和AccessKeySecrect信息。获取方法,请参见准备工作 LTAI5tBHRFKq************
    acesskeySecret SoA0hZtZJ7Lszgy7aL************
    regionid 填入源实例所属的地域ID。地域名称和地域ID的对应关系,请参见地域和可用区 cn-hangzhou
  7. 按下Esc键退出编辑模式,输入:wq并按回车键保存配置并退出编辑界面。
  8. 执行下述格式的命令启动脚本程序,开始执行数据迁移:
    python rdb_restore.py -c r-bp1q4xidqiyqpq**** -d 2021-04-19 -t r-bp1q4xidqiyqpq****.redis.rds.aliyuncs.com -p 6379 -a redistest:Pawd123456 -b 9382****2,9382****3 -t r-bp1ky7j6qc7umk****.redis.rds.aliyuncs.com -p 6379 -a Pawd123456
    表 2. rdb_restore.py脚本的参数说明
    参数 是否必选 说明 示例值
    -c 源实例ID。 SoA0hZtZJ7Lszgy7aL************
    -d 要下载的备份文件所属的日期,格式为yyyy-MM-dd 2021-04-19
    -t 目标Redis实例的连接地址,获取方法,请参见查看连接地址
    • ECS实例通过专有网络连接:需获取目标Redis实例的专有网络连接地址。
    • 本地设备通过公网连接:需获取目标Redis实例的公网连接地址。
    r-bp1q4xidqiyqpq****.redis.rds.aliyuncs.com
    -p 目标实例的端口,默认为6379。 6379
    -a 目标Redis实例的账号(需具备读写权限)及其密码,账号和密码之间使用英文冒号(:)分隔。关于如何创建账号,请参见创建与管理账号 redistest:Pawd123456
    -o 源实例备份文件要下载到的目录,默认为/root/ /root/
    -b 源实例的备份文件ID,如果当天有多个备份,您可以通过本参数指定要下载的备份文件。
    说明
    • 您可以通过控制台的备份与恢复页面或调用DescribeBackups接口查询备份文件ID。
    • 如果源实例为集群架构读写分离架构,您需要通过本参数下载每个数据分片的备份文件,多个备份文件ID间使用英文逗号(,)分隔。
    938261111,938262222
    -h 查看该命令的帮助信息。
    运行该程序后,屏幕上会打印运行的日志信息,当出现 restore: rdb done表示已完成数据恢复操作。
    图 3. redis-port执行结果
    redis-port执行结果