redis 遷移工具 redis-port 從阿里雲遷移到aws
對於 redis 的 遷移我在網上看到了很多方法,有使用redis-dump 的,有使用 aof匯入方式,有rdb檔案遷移方式,和redis-port。
由於我是將 redis 從阿里雲遷移到AWS,那麼很多方法都被pass掉了,最後我想使用的方法是redis-dump 和redis-port.
1. redis-dump
redis-dump
這款工具需要用到
Ruby
,而
centos
環境中的
yum
工具可以安裝的
Ruby
版本最高是
2.0
的版本,而當前
Redis
最新的
4.0
版本中需要用到的
Ruby >= 2.2
Ruby
,而安裝
Ruby
有一個很好的命令列工具可以幫助我們,這款工具就是
RVM
,
RVM
可以提供一個便捷的多版本
Ruby
環境的管理和切換。
# 首先老規矩,我們先到tmp下,用來存放下載的安裝檔案 cd /tmp mkdir rvm cd rvm # 開始安裝RVM gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 curl -O https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installerView Codecurl -O https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer.asc gpg --verify rvm-installer.asc bash rvm-installer stable source /etc/profile.d/rvm.sh
1.1 安裝Ruby
# 檢視可以安裝的Ruby版本 rvm list known # 這裡我們安裝2.4.1 rvm install ruby 2.4.1
1.2 安裝redis-dump工具
# 移除gem自帶源 gem sources --remove https://rubygems.org/ # 新增淘寶源 gem sources -a https://ruby.taobao.org/ # 安裝redis-dump gem install redis-dump -V
1.3 redis-dump匯入匯出
# 匯出命令 redis-dump –u 127.0.0.1:6379 > test.json # 匯出指定資料庫資料 redis-dump -u 127.0.0.1:6379 -d 15 > test.json # 如果redis設有密碼 redis-dump –u :[email protected]127.0.0.1:6379 > test.json #匯入命令 < test.json redis-load # 如果redis設有密碼 < test.json redis-load -u :[email protected]127.0.0.1:6379
redis-dump 工具我在使用的時候發現dump非常緩慢,所以我最終還是使用了redis-port,方便快捷。
2. redis-port
1.1 redis-port的下載
redis-port 的下載連結:連結:https://pan.baidu.com/s/1HkGUSjuYVp8i9K5awkVd0A 提取碼:9grc
下載好後上傳到我們的伺服器。
1.2 阿里雲redis備份下載
我們需要從阿里雲將我們的 redis 的備份資料下載下來
我們在redis的控制檯的備份與恢復中,找到我們最新的資料備份。點選下載。找到複製外網下載地址
拿到這個連結後,我們在linux 上 直接用 wget 命令下載是會報403錯誤的。原因是url裡面包含特殊字元 比如 &,導致 URL被截斷,造成請求 URL 不完整,OSS 中不存在對應的檔案資訊,所以訪問被拒絕提示 403。
因此在 Linux 平臺 URL 需要加上英文單引號才可以通過 wget 工具下載。
wget -c 'http://rdslog-bj.oss-cn-beijing.aliyuncs.com/custinsxxxx/hostinsxxxx/mysql-bin.001150.tar?OSSAccessKeyId=cxxzsxxxx&Expires=9999999&Signature=QxxxxxEwD' -O mysql-bin.001150.tar # -c 引數使 wget 工具在連線中斷的時候嘗試斷點續傳。 # -O 引數將下載的結果儲存為指定的檔案(建議使用 URL 中包含的檔名)。
1.3 redis-port的使用
我們這裡主要使用的redis-port 引數 restore
示例:
./redis-port restore --input=x/dump.rdb --target=dst\_host:dst\_port --auth=dst\_password [--filterkey="str1|str2|str3"] [--targetdb=DB] [--rewrite] [--bigkeysize=SIZE] [--logfile=REDISPORT.LOG]
引數說明 src_host:自建 redis 域名(或者 IP) src_port:自建 redis 埠 src_password:自建 redis 密碼 dst_host:雲資料庫 redis 域名 dst_port:雲資料庫 redis 埠 dst_password:雲資料庫 redis 密碼 str1|str2|str3:過濾具有 str1 或 str2 或 str3 的 key DB:將同步入雲 redis 的 DB rewrite:覆蓋已經寫入的 key bigkeysize=SIZE:當寫入的 value 大於 SIZE 時,走大 key 寫入模式
當出現restore: rdb done
時資料恢復完成。
redis-port 還可以用來進行增量同步,會在我的另外一篇文章寫到。
注意事項:
redis 阿里雲遷移到aws 流程:
redis bgsave 到 磁碟 ---》 阿里雲備份 ---》下載備份----》 redis-port 匯入---》redis資料檢查。
遇到的問題:
redis-port 匯入到99%後報錯 parse rdb checksum error:
問題原因:
redis 預設是 關閉了 checksum。redis-port 工具進行匯入的時候是需要效驗的。
解決辦法:
redis 執行 config set rdbchecksum yes。
這樣生成的rdb檔案就是可以正常匯入的。
注意:阿里雲的 redis 預設是開啟了 checksum 引數的,但是具體不同地域的是否開通了,建議提交工單詢問。
redis -dump 內容採用:連結:https://www.jianshu.com/p/19b5e7b3bffb
redis-port 內容借鑑阿里雲文件 連結:https://help.aliyun.com/document_detail/66012.html