Redis 數據導入導出


Redis 數據導入導出

Intro

環境說明:
202.102.221.11 redis源實例
202.102.221.12 redis目標實例
202.102.221.13 任意linux系統

一、redis-dump方式

1.安裝redis-dump工具

[root@202.102.221.13 ~]$ yum install ruby rubygems ruby-devel -y

** 更改gem源 **

[root@202.102.221.13 ~]$ gem sources -a http://ruby.taobao.org
Error fetching http://ruby.taobao.org:
bad response Not Found 404 (http://ruby.taobao.org/specs.4.8.gz)
  訪問http://ruby.taobao.org,公告通知鏡像維護站點已遷往Ruby China鏡像
 #gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
[root@202.102.221.13 ~]$ gem sources --add http://gems.ruby-china.org/ --remove http://rubygems.org/
http://gems.ruby-china.org/ added to sources
source http://rubygems.org/ not present in cache
[root@202.102.221.13 ~]$ gem sources -l \*\*\* CURRENT SOURCES *** http://gems.ruby-china.org/
[root@202.102.221.13 ~]$ gem install redis-dump -V

2.redis-dump導出

[root@202.102.221.13 ~]$ redis-dump -u :password@202.102.221.11:6379 \> 202.102.221.11.json

3.redis-load導入


[root@202.102.221.13 ~]$ cat 202.102.221.11.json | redis-load -u :password@202.102.221.12:6379

二、aof導入方式

1.源實例生成aof數據

# 清空上文目標實例全部數據
[root@202.102.221.11 ~]$ redis-cli -h 202.102.221.12 -a password flushall
OK
# 源實例開啟aof功能,將在dir目錄下生成appendonly.aof文件
[root@202.102.221.11 ~]$ redis-cli -h 202.102.221.11 -a password config set appendonly yes
OK

2.目標實例導入aof數據**

# 假設appendonly.aof就在當前路徑下
[root@202.102.221.11 ~]$ redis-cli -h 202.102.221.12 -a password --pipe < appendonly.aof
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 5 # 源實例關閉aof功能
[root@202.102.221.11 ~]$ redis-cli -h 202.102.221.11 -a password config set appendonly no
OK

三、rdb文件遷移方式

  1. 關閉要遷移到的服務器的redis的aof日志功能(我的要遷移到的是本機的redis6380.conf)

vim redis6380.conf,將 appendonly yes 修改為 appendonly no

  1. 我們先看一下當前redis的數據,並將數據用save命令固化到rdb文件中,我的rdb文件為/var/rdb/dump6379.rdb

image

  1. 殺掉當前redis的進程,否則下一步的復制rdb文件,rdb處於打開的狀態,復制的文件,會占用同樣的句柄

imageimage

  1. 復制當前redis的rdb文件,名字為你要遷移的redis的rdb文件名(我的要遷移的redis的文件名為 /var/rdb/dump6380.rdb),記住,一定要殺掉當前redis的進程,還有關閉要遷移的服務器的aof功能(如果不關閉aof,默認用aof文件來恢復數據)

image

  1. 啟動6380的redis,我們會發現,6380多出了name的數據,這個數據,就是6379固化到rdb的數據

image

以上就是在不同的redis之間進行rdb的數據遷移,思路就是,復制rdb文件,然后讓要遷移的redis加載這個rdb文件就ok了

四、源實例db0遷移至目標實例db1

[root@202.102.221.11 ~]$ cat redis_mv.sh
#!/bin/bash
redis-cli -h 202.102.221.11 -p 6379 -a password -n 0 keys "*" | while read key do redis-cli -h 202.102.221.11 -p 6379 -a password -n 0 --raw dump $key | perl -pe 'chomp if eof' | redis-cli -h 202.102.221.12 -p 6379 -a password -n 1 -x restore $key 0 echo "migrate key $key" done

Memo

本文轉載整理來源:https://www.cnblogs.com/dadonggg/p/8662455.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM