使用AOF文件进行迁移

redis-cli是原生Redis的命令行工具,您可以使用redis-cli将自建Redis中已保存至AOF文件的数据迁移到云数据库 Tair(兼容 Redis)。本方案具有灵活、高效与自动化等特点,可保障数据的一致性与完整性,但本方案不支持实时同步,仅支持迁移离线数据。

建议停机迁移数据,或在迁移过程中不写入新的数据。

说明

redis-cli不是在线迁移工具,而仅是一个简单的读取、发送工具,无法保证复杂的在线迁移场景,如需进行在线实时迁移,请参见使用DTS迁移Redis

前提条件

  • 将客户端所在设备的IP地址添加到云数据库 Tair(兼容 Redis)白名单中,更多信息请参见设置IP白名单

  • 自建Redis实例已开启AOF功能。若实例未启用,请执行CONFIG SET appendonly yes命令开启AOF功能。

  • 自建Redis实例已关闭混合持久化。若自建实例为Redis 5.0及以上版本,请执行CONFIG SET aof-use-rdb-preamble no命令关闭混合持久化。

操作步骤

  1. 连接自建Redis实例,手动触发AOF文件重写,保存最新的AOF文件。

    redis-cli -h <自建Redis实例IP地址> -p <端口号>  BGREWRITEAOF

    预计返回:Background append only file rewriting started

  2. 通过AOF文件将数据导入到新的云数据库 Tair(兼容 Redis)实例中,此处以AOF文件appendonly.aof为例。

    redis-cli -h <云数据库 Tair(兼容 Redis)的IP地址> -p <端口号>  -a <实例密码> --pipe < appendonly.aof

    示例:redis-cli -h r-bp1zxszhcgatnx****.redis.rds.aliyuncs.com -p 6379 -a user:password --pipe < appendonly.aof

    预计返回:

    All data transferred. Waiting for the last reply...
    Last reply received from server.
    errors: 0, replies: 90

    当看到类似上述信息,表示迁移成功。

后续步骤

如果自建Redis实例不需要一直开启AOF,可在导入完成后通过以下命令关闭。

redis-cli -h <自建Redis实例IP地址> -p <自建Redis实例端口号> CONFIG SET appendonly no

常见问题

  • Q:在导入时产生报错:ERR Protocol error: too big inline request

    A:请通过CONFIG GET aof-use-rdb-preamble命令,检查实例的aof-use-rdb-preamble参数是否为yes。若为yes,请通过CONFIG SET aof-use-rdb-preamble no命令将其置为no,重新生成AOF文件并重试。

    说明

    若将aof-use-rdb-preamble参数改为yes时,AOF文件中的部分数据将压缩,此类数据无法通过redis-cli命令解析、导入。

  • Q:如何导出云数据库 Tair(兼容 Redis)实例的AOF文件?

    A:云数据库 Tair(兼容 Redis)实例不支持导出AOF文件。

  • Q:为什么会导入失败,报错ERR syntax error

    A:若云数据库 Tair(兼容 Redis)实例版本低于自建Redis版本,可能会导致该问题,请购买相同版本或更高版本的云数据库 Tair(兼容 Redis)实例。例如自建Redis和云数据库 Tair(兼容 Redis)实例都是兼容Redis 7.0版本。