Redis 数据迁移方法

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis 数据迁移方法

一、redis-dump迁移

redis-dump需要ruby.2.2.0以上版本,因此,需要先升级。

1、更新编译环境的包
<code>  yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel/<code>
2、安装RVM,通过RVM安装升级
<code>  curl -L get.rvm.io | bash -s stable
  source /etc/profile.d/rvm.sh
  rvm -v                 //安装完成后,通过该方法测试是否安装正常/<code>
3、更新RVM安装镜像
<code>  vim /usr/local/rvm/user/db
 
  ruby_url=https://cache.ruby-china.org/pub/ruby
 
  ruby -v             //查看ruby版本
  rvm list known   //列出已知ruby版本
  rvm install 2.4   //安装ruby2.4版本,会自动去匹配/<code>
4、更新gem版本
<code>  gem update --system               //需要科学上网
  gem -v                             //查看版本号
  gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/   //更换源镜像
  gem sources -l     //查看源镜像内容/<code>
5、安装redis-dump
<code>  gem install redis-dump -V               //安装redis-dump
  redis-dump -v                               //查看版本号及是否安装正常

  redis-dump -u 源地址:6379 -a password > /data/deploy/redis/data/redis_6378.json   //导出
  < redis_6378.json redis-load -u 目标地址:6379 -a password -n       //导入/<code>

二、Redis迁移

源服务器:
<code>  ./redis-cli -h 源IP地址 -a 源密码 config set appendonly yes  //开启aof功能/<code>

开启后,数据在redis/data/6379/ 文件夹里面

<code>  ./redis-cli -h 源IP地址 -a 源密码 config set appendonly no  //关闭aof功能/<code>
目标服务器:
<code>  ./redis-cli -h 目标IP地址 -a 目标密码 --pipe < data/6379/appendonly.aof/<code>

三、脚本迁移

1、Redis全量合并
<code>  #!/bin/bash
  src_ip=源地址
  src_port=6379
  src_db=0
  src_pw='密码'
 
  dest_ip=目标地址
  dest_port=6379
  dest_db=0
  desc_pw='密码'
 
  ./redis-cli -h $src_ip -p $src_port -a $src_pw -n $src_db keys "*" | while read key
  do
  ./redis-cli -h $src_ip -p $src_port -a $src_pw -n $src_db --raw dump $key | perl -pe 'chomp if eof' | ./redis-cli -h $dest_ip -p $dest_port -a $desc_pw
  -n $dest_db -x restore $key 0
      echo "migrate key $key"
  done/<code>
2、差异合并
<code>  #!/bin/bash
  src_ip=127.0.0.1
  src_port=8090
  src_db=14
  src_pw='1234'
 
  dest_ip=127.0.0.1
  dest_port=6379
  dest_db=2
  desc_pw='1234'
   
  #要遍历的key
  k=(test ws we)
 
  for loop in ${k[*]}
  do
      redis-cli -h $src_ip -p $src_port -a $src_pw -n $src_db --raw dump $loop | perl -pe 'chomp if eof' | redis-cli -h $dest_ip -p $dest_port -a $desc_pw -n $dest_db -x restore $loop 0
      echo "The value is: $loop"
  done/<code>
3、导入某个key
<code>  redis-cli -h 127.0.0.1 -p 8090 -a 1234 -n 14 --raw dump test | perl -pe 'chomp if eof' | redis-cli -h 127.0.0.1 -p 8090 -a 1234 -n 15 -x restore test 0/<code>



分享到:


相關文章: