redis-cli是原生Redis的命令列工具,您可以使用redis-cli將自建Redis中已儲存至AOF檔案的資料移轉到Tair (Redis OSS-compatible)。本方案具有靈活、高效與自動化等特點,可保障資料的一致性與完整性,但本方案不支援即時同步,僅支援遷移離線資料。
建議停機遷移資料,或在遷移過程中不寫入新的資料。
redis-cli不是線上遷移工具,而僅是一個簡單的讀取、發送工具,無法保證複雜的線上遷移情境,如需進行線上即時移轉,請參見使用DTS遷移Redis。
前提條件
將用戶端所在裝置的IP地址添加到Tair (Redis OSS-compatible)白名單中,更多資訊請參見設定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 OSS-compatible)執行個體中,此處以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 OSS-compatible)執行個體的AOF檔案?
A:Tair (Redis OSS-compatible)執行個體不支援匯出AOF檔案。
Q:為什麼會匯入失敗,報錯
ERR syntax error
?A:若Tair (Redis OSS-compatible)執行個體版本低於自建Redis版本,可能會導致該問題,請購買相同版本或更高版本的Tair (Redis OSS-compatible)執行個體。例如自建Redis和Tair (Redis OSS-compatible)執行個體都是相容Redis 7.0版本。