天天看點

Redis資料遷移方案

場景

Redis執行個體A ---> Redis執行個體B,整庫全量遷移

方案一:

mac環境

brew install npm

npm install redis-dump -g

針對RedisA: redis-dump -h host1 -p 6379 -d 1 --json > mydb.json

針對RedisB: cat mydb.json | redis-dump --convert | redis-cli 

方案二:

參考: http://www.zlovezl.cn/articles/migrate-redis-server-seamlessly/, 利用redis的主從複制,從RedisA同步到RedisB,完成後,恢複RedisB的master身份。

方案三:(針對阿裡雲Redis資料遷移)

RedisA執行個體的dump.rdb檔案拷貝到一台阿裡雲ecs伺服器上,該伺服器應該能夠連接配接到RedisB執行個體,在該伺服器上自建一個redis執行個體RedisC, 并RedisC的redis.conf配置檔案中的下列配置作出修改:

# The filename where to dump the DB

dbfilename dump.rdb

# The working directory.

#

# The DB will be written inside this directory, with the filename specified

# above using the 'dbfilename' configuration directive.

# Also the Append Only File will be created inside this directory.

# Note that you must specify a directory here, not a file name.

dir /data/mydirectory/  #此處路徑為你拷貝過來的dump.rdb檔案所在路徑

啟動RedisC執行個體,即可導入RedisA執行個體的所有内容

方案四:

開啟使用者現有 Redis 執行個體的 AOF 功能(如果執行個體已經啟用 AOF 功能則忽略此步驟)。

# redis-cli -h old_instance_ip -p old_instance_port config set appendonly yes

通過 AOF 檔案将資料導入到新的 ApsaraDB for Redis 執行個體 (假定生成的 AOF 檔案名為 append.aof)。

# redis-cli -h aliyun_redis_instance_ip -p 6379 -a password --pipe < appendonly.aof

注意:如果原有舊的 Redis 執行個體不需要一直開啟 AOF,可在導入完成後通過以下指令關閉。

# redis-cli -h old_instance_ip -p old_instance_port config set appendonly no

-------------------------------------- 兩個阿裡雲redis執行個體間的資料遷移,綜合方案三,四 --------------------------------------------------------------

1)舊redis執行個體的*.rdb檔案拷貝到一台阿裡雲ecs伺服器(ServerA)上,執行方案三

儲存為dump.rdb到目錄 /var/lib/redis/dump.rdb

重新開機redis: service redis restart

2)執行方案四(在ServerA上運作如下指令)

redis-cli config set appendonly yes(針對本地自建redis)

redis-cli -h 新redis執行個體host  -a 密碼 --pipe < /var/lib/appendonly.aof

/var/lib/appendonly.aof 表示 appendonly.aof檔案在ServerA上的絕對路徑

redis-cli config set appendonly no (針對本地自建redis)

      本文轉自zsdnr  51CTO部落格,原文連結:http://blog.51cto.com/12942149/1949810,如需轉載請自行聯系原作者