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版本。