Redis:使用redis-dump导出、导入、还原数据实例

redis的备份和还原,借助了第三方的工具,redis-dump

1、安装必要环境

c 复制代码
yum -y install zlib-devel openssl-devel

2、安装redis-dump
安装ruby:

ruby下载地址:https://www.ruby-lang.org/zh_cn/downloads/

我下载的是 2.5.0 版本

c 复制代码
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz

ruby安装教程:

安装编译环境

c 复制代码
yum install gcc-c++

先查看ruby安装过的版本

c 复制代码
ruby -v

先卸载之前的版本(破后而立):

c 复制代码
yum remove ruby

解压ruby:

c 复制代码
tar -xvf ruby-2.5.0.tar.gz

创建要安装ruby的目录:

c 复制代码
mkdir -p /usr/local/ruby

进入刚刚解压的目录里面:

c 复制代码
cd ruby-2.5.0

配置并指定要安装ruby的目录:

c 复制代码
./configure --prefix=/usr/local/ruby

编译:

c 复制代码
make

安装:

c 复制代码
make install

建立快捷方式:

c 复制代码
ln -s /usr/local/ruby/bin/ruby /usr/local/bin/ruby

查看ruby是否安装成功:

c 复制代码
ruby -v
c 复制代码
显示: 
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

c 复制代码
wget https://rubygems.org/rubygems/rubygems-3.5.6.zip

解压:

c 复制代码
unzip rubygems-3.1.2.zip

安装:

c 复制代码
cd  rubygems-3.1.2

ruby setup.rb

YUM安装rubygems:

安装依赖环境:

c 复制代码
yum -y install zlib-devel openssl-devel

安装rubygems

c 复制代码
yum install rubygems -y

解压,进入 rubygems 解压目录 bin 目录下安装 redis-dump

c 复制代码
./gem install redis-dump -V

如果报错提示 ruby版本过低,则先安装以下内容

c 复制代码
./gem install uri-redis -v 0.4.2
c 复制代码
./gem install yajl-ruby -v 1.4.1

设置软连

c 复制代码
ln -s /usr/local/ruby/bin/redis-dump /usr/local/bin/redis-dump
c 复制代码
ln -s /usr/local/ruby/bin/redis-load /usr/local/bin/redis-load

3使用:

导出:

c 复制代码
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

恢复:

c 复制代码
# 导入命令
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 的问题

问题分析:

c 复制代码
1、查看podfile文件是否存在不合法的字符,检查格式。
2、可能是 Ruby的版本号,与当前Cocoapods不适配使用。

版本号不适配处理方案:

1、卸载当前的ruby,重新安装ruby

c 复制代码
查看当前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的回答:

c 复制代码
这个警告是由于在 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: 这个信息是指报错了吗?

c 复制代码
不完全是。这个警告信息告诉你,在Redis 5.0.0版本中,Redis#sadd方法的行为已经改变了,它现在总是返回一个整数,而不是以前的OK。因此,在使用Redis#sadd方法时,可能会导致代码在运行时出现意外行为,因为它不再返回预期的值。

警告建议你更新你的代码,使用新的Redis#sadd?方法来替换Redis#sadd,以确保在Redis 5.0.0版本下仍然能够正常工作,并避免因此而引起的问题。
c 复制代码
/usr/local/ruby/lib/ruby/gems/2.7.0/gems/redis-dump-0.4.0/lib/redis/dump.rb
相关推荐
雯0609~6 分钟前
网页F12:缓存的使用(设值、取值、删除)
前端·缓存
℘团子এ10 分钟前
vue3中如何上传文件到腾讯云的桶(cosbrowser)
前端·javascript·腾讯云
学习前端的小z15 分钟前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
soulteary25 分钟前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
彭世瑜39 分钟前
ts: TypeScript跳过检查/忽略类型检查
前端·javascript·typescript
FØund40440 分钟前
antd form.setFieldsValue问题总结
前端·react.js·typescript·html
Backstroke fish40 分钟前
Token刷新机制
前端·javascript·vue.js·typescript·vue
小五Five42 分钟前
TypeScript项目中Axios的封装
开发语言·前端·javascript
小曲程序42 分钟前
vue3 封装request请求
java·前端·typescript·vue
临枫54142 分钟前
Nuxt3封装网络请求 useFetch & $fetch
前端·javascript·vue.js·typescript