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
命令关闭混合持久化。
操作步骤
连接自建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版本。