您好,登錄后才能下訂單哦!
這篇文章主要介紹了Redis數(shù)據(jù)導(dǎo)入導(dǎo)出以及數(shù)據(jù)遷移的方法有哪些,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
因?yàn)檫@種方式比較簡單,所以我就先介紹它。
分兩步來實(shí)現(xiàn),第一步先讓源 Redis 生成 AOF 數(shù)據(jù)文件。
# 清空上文目標(biāo)實(shí)例全部數(shù)據(jù) redis-cli -h 目標(biāo)RedisIP -a password flushall # 源實(shí)例開啟 aof 功能,將在 dir 目錄下生成 appendonly.aof 文件 redis-cli -h 源RedisIP -a password config set appendonly yes
dir 目錄,可以通過 config get dir 目錄獲得。
config get dir # 比如我的 Mac 上執(zhí)行上面的命令后,返回如下內(nèi)容 1) "dir" 2) "/usr/local/var/db/redis"
通過上面的命令,我們可以看到我本地的 dir 目錄是:/usr/local/var/db/redis。
現(xiàn)在我們來做第二步操作,讓目標(biāo) Redis 實(shí)例導(dǎo)入 aof 數(shù)據(jù)。
# 將 appendonly.aof 文件放在當(dāng)前路徑下 redis-cli -h 目標(biāo)RedisIp -a password --pipe < appendonly.aof # 源實(shí)例關(guān)閉 aof 功能 redis-cli -h 源RedisIp -a password config set appendonly no
上面的第一個(gè)命令,執(zhí)行后,如果出現(xiàn)以下內(nèi)容,則表示導(dǎo)入 aof 數(shù)據(jù)成功。
All data transferred. Waiting for the last reply... Last reply received from server. errors: 0, replies: 5
我這里是測試,數(shù)據(jù)比較少,所以提示有 5 個(gè)導(dǎo)入成功了。
AOF 的缺點(diǎn)也很明顯,就是速度慢,并且如果內(nèi)容多的話,文件也比較大。而且開啟 AOF 后,QPS 會(huì)比 RDB 模式寫的 QPS 低。還有就是 AOF 是一個(gè)定時(shí)任務(wù),可能會(huì)出現(xiàn)數(shù)據(jù)丟失的情況。
我的腳本內(nèi)容如下:
#!/bin/bash #redis 源ip src_ip=192.168.1.4 #redis 源port src_port=6379 #redis 目的ip dest_ip=127.0.0.1 #redis 目的port dest_port=6389 #要遷移的key前綴 key_prefix= i=1 redis-cli -h $src_ip -p $src_port -a password keys "${key_prefix}*" | while read key do redis-cli -h $dest_ip -p $dest_port -a password del $key redis-cli -h $src_ip -p $src_port -a password --raw dump $key | perl -pe 'chomp if eof' | redis-cli -h $dest_ip -p $dest_port -a password -x restore $key 0 echo "$i migrate key $key" ((i++)) done
大家在使用的時(shí)候,只需要替換 IP 即可。
這個(gè)腳本同樣有一個(gè)問題就是使用了 keys *,然后一個(gè)一個(gè)遍歷,如果是生產(chǎn)環(huán)境,不建議這樣使用!當(dāng)然我的腳本也是可以再進(jìn)行優(yōu)化的!
3、使用 redis-dump 工具。
Redis-Dump 是一個(gè)用于 Redis 數(shù)據(jù)導(dǎo)入 / 導(dǎo)出的工具,是基于 Ruby 實(shí)現(xiàn)的,可以方便的進(jìn)行 redis 的數(shù)據(jù)備份。這個(gè)工具需要先安裝,以我的 Mac 為例,安裝教程如下:
# 沒安裝 ruby 的話,先安裝 ruby brew install ruby # 移除 gem 自帶源 gem sources --remove https://rubygems.org/ # 添加淘寶源 gem sources -a https://ruby.taobao.org/ # 安裝 redis-dump gem install redis-dump -V
目前我發(fā)現(xiàn),淘寶的鏡像已經(jīng)出現(xiàn) bad response Not Found 404 了,被告知鏡像維護(hù)站點(diǎn)已遷往 Ruby China 鏡像。
# 替換鏡像地址 gem sources --add http://gems.ruby-china.org/ --remove http://rubygems.org/ # 確認(rèn)鏡像地址是否替換成功 gem sources -l # 替換成功后再安裝 redis-dump gem install redis-dump -V
安裝完成后,就可以使用 redis-dump 工具進(jìn)行數(shù)據(jù)的導(dǎo)入導(dǎo)出了!
# redis-dump 導(dǎo)出 redis-dump -u :password@源RedisIp:6379 > 源Redis數(shù)據(jù)文件.json # redis-load 導(dǎo)入 cat 源Redis數(shù)據(jù)文件.json | redis-load -u :password@目標(biāo)RedisIp:6379
cat 源Redis數(shù)據(jù)文件.json | redis-load -u :password@目標(biāo)RedisIp:6379
Linux 系統(tǒng)或者 Window 系統(tǒng)也都類似,安裝 redis-dump 工具完成后直接使用 redis-dump 導(dǎo)出,redis-load 導(dǎo)入即可完成數(shù)據(jù)的備份與遷移。
redis-dump 工具很強(qiáng)大,建議大家到官網(wǎng)上多看看它的官方文檔。
redis-dump 麻煩就麻煩在需要進(jìn)行安裝,如果我的 Redis 已經(jīng)有備份機(jī)制,比如有 rdb 文件,那么我們直接遷移 rdb 文件就可以達(dá)到同樣的目的。
首先,我們可以先關(guān)閉源 Redis 實(shí)例的 aof 功能。如果不關(guān)閉 aof,Redis 默認(rèn)用 aof 文件來恢復(fù)數(shù)據(jù)。
# 源實(shí)例關(guān)閉 aof 功能 redis-cli -h 源RedisIp -a password config set appendonly no
然后使用 save 命令把數(shù)據(jù)固化到 rdb 文件中。
# 固化數(shù)據(jù)到 RDB 文件 save
save 完成后,還是通過 config get dir 命令獲得保存的 RDB 數(shù)據(jù)文件位置。
接下來,我們需要?dú)⑺?redis 進(jìn)程。殺掉當(dāng)前 redis 的進(jìn)程,否則下一步的復(fù)制 rdb 文件,rdb 處于打開的狀態(tài),復(fù)制的文件,會(huì)占用同樣的句柄。
kill -9 redis # 或者 pkill -9 redis # 或者手段關(guān)閉 Redis 服務(wù)
然后復(fù)制源 redis 的 rdb 文件到目標(biāo) Redis 的 dir 數(shù)據(jù)目錄,名字為你要遷移的 redis 的 rdb 文件名。
復(fù)制完成后,重啟目標(biāo) Redis 實(shí)例,數(shù)據(jù)就遷移完成了。 重啟完成后可以驗(yàn)證一下數(shù)據(jù)是否成功的復(fù)制了。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Redis數(shù)據(jù)導(dǎo)入導(dǎo)出以及數(shù)據(jù)遷移的方法有哪些”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。