闲着无事,在家里无聊。两天前,我搞了一个《2020-nCoV 新型肺炎确诊患者相同行程查询工具 V1.3》,在朋友圈里疯狂转发!我兴奋极力了,这让我感受到了作为一个程序员的莫大价值。于是,我登上 B 站,想娱乐一下,发现我之前录制的一些视频被很多人关注了,并且播放量也蹭蹭的上涨。这又诱惑的我想继续录制一些视频了,这次的内容就是 4 种方式让你彻底掌握 Redis 的导入导出以及数据迁移!
本文是一个文档教程,视频教程目前还在 B 站进行审核!等审核通过后给大家链接,并且我会发到朋友圈!
1、aof 导入方式。
因为这种方式比较简单,所以我就先介绍它。
分两步来实现,第一步先让源 Redis 生成 AOF 数据文件。
dir 目录,可以通过 config get dir 目录获得。
通过上面的命令,我们可以看到我本地的 dir 目录是:/usr/local/var/db/redis。
现在我们来做第二步操作,让目标 Redis 实例导入 aof 数据。
上面的第一个命令,执行后,如果出现以下内容,则表示导入 aof 数据成功。
我这里是测试,数据比较少,所以提示有 5 个导入成功了。
AOF 的缺点也很明显,就是速度慢,并且如果内容多的话,文件也比较大。而且开启 AOF 后,QPS 会比 RDB 模式写的 QPS 低。还有就是 AOF 是一个定时任务,可能会出现数据丢失的情况。
2、通过我的 xttblog_redis_mv.sh 脚本来实现。
我的脚本内容如下:
大家在使用的时候,只需要替换 IP 即可。
这个脚本同样有一个问题就是使用了 keys *,然后一个一个遍历,如果是生产环境,不建议这样使用!当然我的脚本也是可以再进行优化的!
3、使用 redis-dump 工具。
Redis-Dump 是一个用于 Redis 数据导入 / 导出的工具,是基于 Ruby 实现的,可以方便的进行 redis 的数据备份。这个工具需要先安装,以我的 Mac 为例,安装教程如下:
目前我发现,淘宝的镜像已经出现 bad response Not Found 404 了,被告知镜像维护站点已迁往 Ruby China 镜像。
安装完成后,就可以使用 redis-dump 工具进行数据的导入导出了!
Linux 系统或者 Window 系统也都类似,安装 redis-dump 工具完成后直接使用 redis-dump 导出,redis-load 导入即可完成数据的备份与迁移。
redis-dump 工具很强大,建议大家到官网上多看看它的官方文档。
4、rdb 文件迁移
redis-dump 麻烦就麻烦在需要进行安装,如果我的 Redis 已经有备份机制,比如有 rdb 文件,那么我们直接迁移 rdb 文件就可以达到同样的目的。
首先,我们可以先关闭源 Redis 实例的 aof 功能。如果不关闭 aof,Redis 默认用 aof 文件来恢复数据。
然后使用 save 命令把数据固化到 rdb 文件中。
save 完成后,还是通过 config get dir 命令获得保存的 RDB 数据文件位置。
接下来,我们需要杀死 redis 进程。杀掉当前 redis 的进程,否则下一步的复制 rdb 文件,rdb 处于打开的状态,复制的文件,会占用同样的句柄。
然后复制源 redis 的 rdb 文件到目标 Redis 的 dir 数据目录,名字为你要迁移的 redis 的 rdb 文件名。
复制完成后,重启目标 Redis 实例,数据就迁移完成了。重启完成后可以验证一下数据是否成功的复制了。
最后说一下,我所有的操作都是在相同的版本下进行的。如果版本不相同,可能会出现报错的情况。还有就是 redis 必须要求用户对”config get dir”目录拥有写入权限,不然会报 saving-permission-denied 错误。Redis 的 save 条件在 /etc/redis.conf 中可以看到,也可以自己修改调整!