redis-cli是原生Redis的命令行工具,您可以使用redis-cli将自建Redis中已保存至AOF文件的数据迁移到云数据库 Tair(兼容 Redis)。本方案具有灵活、高效与自动化等特点,可保障数据的一致性与完整性,但本方案不支持实时同步,仅支持迁移离线数据。
建议停机迁移数据,或在迁移过程中不写入新的数据。
redis-cli不是在线迁移工具,而仅是一个简单的读取、发送工具,无法保证复杂的在线迁移场景,如需进行在线实时迁移,请参见从本地迁移至阿里云。
前提条件
- 将客户端所在设备的IP地址添加到云数据库 Tair(兼容 Redis)白名单中,更多信息请参见设置IP白名单。 
- 自建Redis实例已开启AOF功能。若实例未启用,请执行 - CONFIG SET appendonly yes命令开启AOF功能。
- 自建Redis实例已关闭混合持久化。若自建实例为Redis 5.0及以上版本,请执行 - CONFIG SET aof-use-rdb-preamble no命令关闭混合持久化。
操作步骤
- 连接自建Redis实例,手动触发AOF文件重写,保存最新的AOF文件。 - redis-cli -h <自建Redis实例IP地址> -p <端口号> BGREWRITEAOF- 预计返回: - Background append only file rewriting started
- 通过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版本。