redis的备份和还原,借助第三方的工具,redis-dump
一、debian安装 ruby 和 rubygem
查看可用版本
apt-cache policy ruby
安装,我装的是 ruby3.0,装完之后自带 rubygem ,可直接使用
apt-get install ruby ruby-dev -y
二、Centos7安装 ruby 和 rubygem
yum -y install zlib-devel openssl-devel
2.1、安装ruby:
ruby下载地址:https://www.ruby-lang.org/zh_cn/downloads/
我下载的是 2.6.0 版本
wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.gz
ruby安装教程:
参考:
关键步骤:
tar -xvf ruby-2.6.0.tar.gz
cd ruby-2.6.0
mkdir -p /usr/local/ruby
./configure --prefix=/usr/local/ruby
如有必要可指定 openssl 目录,1.1.1 版本 openssl 安装点我查看
./configure --prefix=/usr/local/ruby --with-openssl-dir=/usr/local/openssl
make && make install
ln -s /usr/local/ruby/bin/ruby /usr/local/bin/ruby
测试是否安装成功:
ruby -v
2.2、手动安装rubygems
- 下载 rubygems-x.x.x.zip 包,下载地址:Download RubyGems | RubyGems.org | your community gem host 点击下载ZIP
- 解压,进入 rubygems 解压目录 bin 目录下安装 redis-dump
三、安装 redis-dump
./gem install redis-dump -v 0.4.0
或
./gem install redis-dump -V
如果报错提示 ruby 版本过低,则先安装以下内容(一般都会报错,可先直接执行以下两条命令)
./gem install uri-redis -v 0.4.2
./gem install yajl-ruby -v 1.4.1
设置软连
ln -s /usr/local/ruby/bin/redis-dump /usr/local/bin/redis-dump
ln -s /usr/local/ruby/bin/redis-load /usr/local/bin/redis-load
四、报错解决办法:
4.1、zlib报错
ERROR: Loading command: install (LoadError)
cannot load such file -- zlib
ERROR: While executing gem ... (NoMethodError)
undefined method `invoke_with_build_args' for nil:NilClass
解决办法:
yum -y install zlib-devel
进入ruby源码文件夹, 安装ruby自身提供的zlib包
cd ruby-2.5.1/ext/zlib
ruby ./extconf.rb
make
make install
执行make,若出现: make: *** 没有规则可以创建“****.o”需要的目标“/include/ruby.h”,停止。在Makefile 顶部中的增加 top_srcdir = ../..
4.2、openssl报错
Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
解决办法:
yum install openssl-devel -y
进入ruby源码文件夹
cd ruby-2.5.1/ext/openssl
ruby ./extconf.rb
make
make install
执行make,若出现: make: *** 没有规则可以创建“****.o”需要的目标“/include/ruby.h”,停止。在Makefile 顶部中的增加 top_srcdir = ../..
五、redis-dump导入导出数据
安装完成后 redis-dump,redis-load 工具在 ruby(我的是 /usr/local/ruby/bin) 所在目录下,可以设置软连接,就可以直接使用了
[root@localhost bin]# ln -s /usr/local/ruby/bin/redis-dump /usr/local/bin/redis-dump
[root@localhost bin]# ln -s /usr/local/ruby/bin/redis-load /usr/local/bin/redis-load
$ redis-dump -u 127.0.0.1:6379 > db_full.json
$ redis-dump -u 127.0.0.1:6379 -d 15 > db_db15.json
$ < db_full.json redis-load
$ < db_db15.json redis-load -d 15
$ < db_db15.json redis-load -u 127.0.0.1:6380 -d 15
# 这里需要注意如果你导出的DB与导入的DB不一致,则会导入失败
# OR
$ cat db_full | redis-load
$ cat db_db15.json | redis-load -d 15
$ cat db_db15.json | redis-load -u 127.0.0.1:6380 -d 15
# You can specify the redis URI via an environment variable
$ export REDIS_URI=127.0.0.1:6379
$ redis-dump
导入数据时原有的不存在导入文件的数据不会删除,已经存在导入文件重复的key会被覆盖