08月18, 2020
收藏本站

导出导入redis数据

今天有个需求,从A服务器导出redis指定key的数据到B服务器。
度娘了下,四种方式:
一、 脚本导入

  • #!/bin/bash
  • #redis 源ip
  • src_ip=192.168.1.4
  • #redis 源port
  • src_port=6379
  • #redis 源password
  • src_pwd=123
  • #redis 目的ip
  • dest_ip=127.0.0.1
  • #redis 目的port
  • dest_port=6389
  • #redis 目的password
  • dest_pwd=123
  • #要迁移的key前缀(替换成自己要导入的key前缀)
  • key_prefix=abul
  • redis-cli -h $src_ip -p $src_port -a $src_pwd keys "${key_prefix}*" | while read key
  • do
  • #先删除key,再插入
  • redis-cli -h $dest_ip -p $dest_port -a $dest_pwd del $key
  • redis-cli -h $src_ip -p $src_port -a $src_pwd --raw dump $key | perl -pe 'chomp if eof' | redis-cli -h $dest_ip -p $dest_port -a $dest_pwd -x restore $key 0
  • echo "$i migrate key $key"
  • done
bash

我使用的就是这种方式,因为需要导入的只是指定key,也比较简单,但也遇到一些小坑,后面会讲。
二、 aof 导入方式
将源 Redis 生成 AOF 数据文件

  • 127.0.0.1:6379> config set appendonly yes
  • OK

生成的appendonly.aof文件在dir目录,可通过config get dir获得

  • 127.0.0.1:6379> config get dir
  • 1) "dir"
  • 2) "/var/redis/6379"

导入目标redis实例 redis-cli -h 目标RedisIp -a password --pipe < appendonly.aof 三、 redis-dump工具
安装redis-dump工具

  • yum install ruby rubygems ruby-devel -y
  • # 替换镜像地址
  • gem sources --add http://gems.ruby-china.org/
  • # 确认镜像地址是否替换成功
  • gem sources -l
  • # 替换成功后再安装 redis-dump
  • gem install redis-dump -V
properties

安装完成后,开始导出

  • # redis-dump 导出
  • redis-dump -u :password@源RedisIp:6379 > 源Redis数据文件.json
  • # redis-load 导入
  • cat 源Redis数据文件.json | redis-load -u :password@目标RedisIp:6379
pgsql

四、 rdb 文件迁移
源实例关闭 aof 功能 config set appendonly no
固化数据到 RDB 文件 save
save 完成后,还是通过 config get dir 命令获得保存的 RDB 数据文件位置,并关闭redis。
然后复制源 redis 的 rdb 文件到目标 Redis 的 dir 数据目录,名字为你要迁移的 redis 的 rdb 文件名。
复制完成后,重启目标 Redis 实例,数据就迁移完成了。

遇到的小坑:

  1. 存在跨服务器导出或读取数据
    Could not connect to Redis at 10.10.10.159:6379: Connection refused
    首先目标服务器防火墙如果开启,需要开放6379端口;另外目标redis.conf配置的bind需要指定为0.0.0.0。
  2. 不同版本redis导入数据报错
    ERR DUMP payload version or checksum are wrong
    不同版本导致,处理办法:
    1)开启源实例aof持久化功能
    config set appendonly yes
    2)手动进行aof持久化
    bgrewriteaof
    3)新建一个redis实例,与目标实例版本相同并启动
    将源实例的redis的aof文件导入新建实例
    redis-cli -h 127.0.0.1 -p 6395 -a password --pipe < appendonly.aof
    最后通过一的脚本导入。

Comments