redis备份迁移恢复

1、redis-shake

redis-shake模式介绍

redis-shake 常见于生产环境中将 Redis 单机实例迁移到集群实例或者需要无缝将一个小规格 Redis 实例迁移到另一个大规格 Redis 实例。

redis-shake 支持迁移单实例、集群等,也支持将数据备份或者迁移到阿里云。
在这里插入图片描述

注意事项

如果目标库的数据逐出策略(maxmemory-policy)配置为除noeviction以外的值,可能导致目标库的数据与源库不一致。关于数据逐出策略详情,请参见Redis数据逐出策略介绍。
如果源库中的部分Key使用了过期(Expire)机制,由于可能存在Key已过期但未被及时删除的情形,在目标库中查看(如通过info命令)的Key数量会比源库的Key数量少。

安装redis-shake

  1. 登录待安装redis-shake的设备,例如ECS实例或本地设备。

  2. 执行下述命令下载redis-shake文件:

    wget 'https://github.com/alibaba/RedisShake/releases/download/v3.1.7/redis-shake-linux-amd64.tar.gz'
    

    说明 本文以redis-shake 3.1.7版本为例演示操作流程。如有更新版本,推荐使用最新版本,更多版本,请参见redis-shake版本列表

  3. 执行下述命令解压redis-shake文件:

    tar xzf redis-shake-linux-amd64.tar.gz
    
  4. 在安装redis-shake的设备上,执行数据迁移操作。

    1. 在redis-shake目录中,执行下述命令,进入配置文件编辑界面:

      vim sync.toml
      
    2. 输入a进入编辑模式。

    3. 修改配置文件。

      类别参数说明取值示例
      typeredis-shake模式,固定为sync,为同步模式。sync
      sourceaddress源库的连接地址和端口号,连接地址和端口号之间使用英文冒号(:)分隔。说明如果源库与redis-shake部署在同一设备,可填写为127.0.0.1:6379。如果源库为集群架构,需要为N个节点启动N个redis-shake工具,源端分别为各节点的连接地址,目标端为相同目标实例地址(标准架构的连接地址、集群架构的任意节点连接地址、读写分离架构的主节点连接地址)。127.0.0.1:6379
      username源库的账号,如果源库未使用ACL,无需填写。ausername
      password源库的密码,如果源库未设置密码,无需填写。Rp829dlwa
      targettype目标实例的架构,取值:standalone:标准(主从)架构集群架构代理模式(Proxy)读写分离架构说明 目标实例为读写分离架构时,目标连接地址(address)需填写读写分离实例的主节点。cluster:集群架构直连模式standalone
      address目标实例的连接地址与端口号,连接地址和端口号之间使用英文冒号(:)分隔。关于如何获取连接地址和端口号,请参见查看连接地址。ECS实例与目标实例为同一专有网络时,可通过专有网络进行迁移,需获取Tair或Redis实例的专有网络连接地址。若ECS实例与目标实例为跨地域或不在同一个专有网络下,则需要通过公网进行迁移。本地设备可通过公网进行迁移,需获取Tair或Redis实例的公网连接地址。r-bp1wcw2rlw76acc5k****.redis.rds.aliyuncs.com:6379
      password目标实例的账号(需具备读写权限)及其密码。使用默认账号(以实例ID命名的账号):直接填写密码即可。使用新创建的账号:密码格式为*user:password*。例如自定义账号为testaccount,密码为Rp829dlwa,密码需填写为testaccount:Rp829dlwa。关于如何创建账号,请参见创建与管理账号testaccount:Rp829dlwa

      说明 其他参数如无特殊需求无需配置,如需了解更多,请查看sync.toml文件中各参数的注释。

    4. 按下Esc键退出编辑模式,输入:wq并按回车键保存配置、退出编辑界面。

    5. 执行下述命令启动redis-shake,redis-shake将开始执行数据迁移:

      ./redis-shake sync.toml
      

      redis-shake将在屏幕上打印运行的日志信息。

参考

  1. 阿里云帮助中心
    https://help.aliyun.com/document_detail/111066.html
  2. github中文文档
    https://github.com/alibaba/RedisShake/wiki
  3. githup项目地址
    https://github.com/alibaba/RedisShake

2、redis-dump安装

2.1 mac上安装

brew install ruby
gem sources --add https://mirrors.aliyun.com/rubygems/
gem sources --remove https://rubygems.org/
gem sources --list
gem install redis-dump -V

2.2 centos上安装

2.2.1 方式一:

  • 在centos7上yum安装

#安装
yum install centos-release-scl-rh -y
yum install rh-ruby30* -y
scl  enable  rh-ruby30 bash
ruby -v
gem install redis-dump -V
#切换源
#gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
#gem sources --remove https://mirrors.aliyun.com/rubygems/
#gem sources -a https://rubygems.org/
#gem install redis-dump -V
#备份单个db
redis-dump -u :redis_password@redis_ip:6379 -d 0 > /tmp/db0.json
redis-dump -u :redis_password@redis_ip:6379  -d 1 > /tmp/db1.json

#备份整个db
redis-dump -u :redis_password@redis_ip:6379  > /tmp/all.json

备份恢复
cat /tmp/db0.json |redis-load -u :redis_password@redis_ip:6379
cat /tmp/all.json |redis-load -u :redis_password@redis_ip:6379

报错及解决:添加参数 -n

ERROR (Yajl::ParseError): lexical error: invalid bytes in UTF8 string.
          :-1,"type":"zset","value":[["21716173734803_b7ab7cec-2b55-4
                     (right here) ------^
解决:加 -n参数
cat redis-alldbs-backup.json |redis-load -n -u :fSVVGPpYwdjPjz2z@172.19.38.123:6379

  • 当退出当前终端后,再次使用redis-dump,需要再次执行命令
scl  enable  rh-ruby27 bash
2.2.2 方式二
  • rvm(ruby versiuon manager)
  • 该方式需要配置代理

export http_proxy='代理ip:代理端口'
export https_proxy='代理ip:代理端口'

curl -sSL https://get.rvm.io | bash
source /etc/profile.d/rvm.sh
rvm install ruby-2.7
gem install redis-dump -V

#验证
redis-dump -v
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值