redis的备份和还原,借助了第三方的工具,redis-dump
1、安装必要环境
yum -y install zlib-devel openssl-devel
2、安装redis-dump
安装ruby:
ruby下载地址:https://www.ruby-lang.org/zh_cn/downloads/
我下载的是 2.5.0 版本
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz
ruby安装教程:
安装编译环境
yum install gcc-c++
先查看ruby安装过的版本
ruby -v
先卸载之前的版本(破后而立):
yum remove ruby
解压ruby:
tar -xvf ruby-2.5.0.tar.gz
创建要安装ruby的目录:
mkdir -p /usr/local/ruby
进入刚刚解压的目录里面:
cd ruby-2.5.0
配置并指定要安装ruby的目录:
./configure --prefix=/usr/local/ruby
编译:
make
安装:
make install
建立快捷方式:
ln -s /usr/local/ruby/bin/ruby /usr/local/bin/ruby
查看ruby是否安装成功:
ruby -v
显示:
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
手动安装rubygems
有两种安装方式:
1.yum方式安装
2.源码方式安装
源码安装rubygems:
下载 rubygems-x.x.x.zip 包,下载地址:Download RubyGems | RubyGems.org | your community gem host 点击下载ZIP
wget https://rubygems.org/rubygems/rubygems-3.5.6.zip
解压:
unzip rubygems-3.1.2.zip
安装:
cd rubygems-3.1.2
ruby setup.rb
YUM安装rubygems:
安装依赖环境:
yum -y install zlib-devel openssl-devel
安装rubygems
yum install rubygems -y
解压,进入 rubygems 解压目录 bin 目录下安装 redis-dump
./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
3使用:
导出:
redis-dump -u 127.0.0.1:6379 > data.json
# 导出指定数据库中的数据,比如说 0 号数据库
redis-dump -u 127.0.0.1:6379 -d 0 > data8.json
# 如果 redis 设置了有密码
redis-dump -u {host} -a {password} > data.json
redis-dump -u :{password}@127.0.0.1:6379 > data.json
# 如果需要导出的 redis 是一个 URL 连接地址时,貌似可以这样(没有实操过,具体不清楚)
redis-dump -u :{password}@{domain}:{port}
# eg: redis-dump -u :123456@www.alex.com:9055
恢复:
# 导入命令
cat data.json | redis-load
# 或者
< data.json redis-load
# 导入数据到 8 号数据库
cat data8.json | redis-load -u 127.0.0.1:6379 -a 123456 -d 0
# 或者
< data8.json redis-load -u 127.0.0.1:6379 -a 123456 -d 0
# 如果以上命令是因为 utf-8 格式报错时,可以加上 `-n` 参数
cat data8.json | redis-load -n -u 127.0.0.1:6379 -a 123456 -d 0
# 这里需要注意如果你导出的DB与导入的DB不一致,则会导入失败
如果想导入到别的db库里面可以使用sed进行替换库号:
sed 's/"db":0/"db":1/g' 40-6401-redis-db-0.json > output-40-6401-redis-db-1.json
补充:
问题一:
解决 podinstall 出现 incompatible character encodings: UTF-8 and ASCII-8BIT 的问题
问题分析:
1、查看podfile文件是否存在不合法的字符,检查格式。
2、可能是 Ruby的版本号,与当前Cocoapods不适配使用。
版本号不适配处理方案:
1、卸载当前的ruby,重新安装ruby
查看当前ruby版本号
ruby -v
结果如下:
ruby 2.6.8p205 (2021-07-07 revision 67951) [x86_64-darwin21]
不建议使用最新的版本,可能存在问题,最好使用比较稳定的版本,2.6 或2.7 的版本
问题二:
导入过程中提示如下错误
edis/dump.rb:236:in block in set_value_set’)Redis#sadd will always return an Integer in Redis 5.0.0. Use Redis#sadd? instead.(called fron: /usr/local/ruby/lib/ruby/gems/2.7.0/gems/redis-dump-0.4.0/lib/r edis/dump.rb:236:in `block in set_value_set’)
AI的回答:
这个警告是由于在 Ruby Gem 的 redis-dump 中的代码中使用了 Redis#sadd 方法,而在 Redis 5.0.0 中,Redis#sadd 方法会始终返回一个整数值而不是 OK。
为了解决这个问题,建议你更新 redis-dump 的版本,或者修改 redis-dump 的代码,将 Redis#sadd 方法替换为 Redis#sadd? 方法。 Redis#sadd? 方法在 Redis 5.0.0 中会返回 true,表示添加成功,否则返回 false。
如果你能访问 redis-dump 的源代码,可以在 redis/dump.rb 文件的 236 行处找到该代码,将其中的 sadd 替换为 sadd?。
You: 这个信息是指报错了吗?
不完全是。这个警告信息告诉你,在Redis 5.0.0版本中,Redis#sadd方法的行为已经改变了,它现在总是返回一个整数,而不是以前的OK。因此,在使用Redis#sadd方法时,可能会导致代码在运行时出现意外行为,因为它不再返回预期的值。
警告建议你更新你的代码,使用新的Redis#sadd?方法来替换Redis#sadd,以确保在Redis 5.0.0版本下仍然能够正常工作,并避免因此而引起的问题。
/usr/local/ruby/lib/ruby/gems/2.7.0/gems/redis-dump-0.4.0/lib/redis/dump.rb