Redis 通过 RDB 方式进行数据备份与还原

Intro

有的时候我们需要对 Redis 的数据进行迁移,今天介绍一下通过 RDB(快照)文件进行 Redis 数据的备份和还原

Redis 持久化

Redis 的数据持久化有两种机制,一种是 RDB(Redis Database),一种是 AOF(Append Only File)

Redis 提供了不同级别的持久化方式:

  • RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.

  • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.

  • 如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.

  • 你也可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.

废话不多说直接看下面的示例吧,通过 docker 运行一个 redis 实例,并设置一些数据,然后导出 RDB 文件,再运行一个 redis 实例通过 RDB 文件还原数据

备份

通过 docker run -d --name redis-test-1 redis:alpine 命令来创建一个 redis 实例,接着 SET 一个 key 保存到我们的 redis,使用命令 SET hello world 写入测试数据,你也可以写入别的自己想写的数据,接着可以使用 keys * 来验证数据是否写入成功

测试数据写入成功后使用 SAVE 命令来创建 RDB 文件,命令执行成功后我们可以在 /data 目录下看到会有一个 dump.rdb 文件,这就是我们想要的 RDB 文件,通过 docker cp 命令可以把这个文件拷贝到 host 目录下

还原

通过上面 RDB 文件我们可以在 redis 启动的时候还原 RDB 文件中的数据,只需要在 Redis 启动前把 RDB 文件放在 redis 的 data 目录下就可以了。

执行 docker run --rm --name redis-test-2 -v ${pwd}/data:/data redis:alpine

这个命令我是在 powershell 上执行的,如果执行在 Linux 上执行需要把 ${pwd} 换成 $(pwd) 来表示当前目录

可以看到上面的日志里有 Loading RDB ... 就是在加载 RDB 文件中的数据

我们再来验证一下 RDB 文件里的数据是否真的加载到了新的 redis 实例中,先来验证一下 data 目录是否正常挂载了,执行 docker exec -it redis-test-2 sh 来进入到 redis 实例容器中,ls 查看 data 目录中的文件看是否有我们期望的 RDB 文件,接着进入 redis-cli 来验证数据是否存在

使用 keys * 来列出来所有的 key 信息,可以看到有我们在上一个 redis 里写入的测试数据了,再来使用 GET hello 来验证数据是否正确,至此我们的数据就还原到新的 redis 实例中了~~

More

当 Redis 需要保存 dump.rdb 文件时, 服务器执行以下操作:

  • Redis 调用forks. 同时拥有父进程和子进程。

  • 子进程将数据集写入到一个临时 RDB 文件中。

  • 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。

这种工作方式使得 Redis 可以从写时复制(copy-on-write)机制中获益。

如果 redis 被访问的比较频繁,可以使用 BGSAVE 代替 SAVE 来异步创建 RDB 备份

如果 redis 不是使用 docker 来使用的,/data 目录可以在 redis-cli 中使用 CONFIG GET dir 来获取保存 rdb 文件的目录,默认保存的 RDB 文件名称是 dump.rdb,如果有修改过,可以通过 CONFIG GET dbfilename 来获取当前使用的文件名

References

  • https://redis.io/topics/persistence

  • http://redis.cn/topics/persistence.html

Redis 通过 RDB 方式进行数据备份与还原相关推荐

  1. Mysql数据库的简单备份与还原_史上最简单的MySQL数据备份与还原教程

    本文主要为大家详细介绍了史上最简单的MySQL数据备份与还原教程第一篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家. 数据备份与还原第一篇分享给大家,具体内容如下 基础概念: ...

  2. MySql笔记之数据备份与还原

    MySQL数据备份.还原与迁移 一.数据备份------mysqldump 1.语法: mysqldump -u user(用户名)-h host(登录用户的主机名称)-p password(登录密码 ...

  3. ECShop后台详解-模块管理、基本信息设置、商品展示、促销管理、订单管理、文章管理、报表统计、数据备份与还原

    在ECShop后台可进行商品管理.促销管理.订单管理.广告管理.报表统计.文章管理.会员管理.模板管理.短信管理.数据库管理等模块的设置. 模板管理 一个好的网店模板,首先会给人留下深刻的视觉印象.网 ...

  4. MySQL操作之数据备份与还原

    序号 类型 地址 1 MySQL MySQL操作之概念.SQL约束(一) 2 MySQL MySQL操作之数据定义语言(DDL)(二) 3 MySQL MySQL操作之数据操作语言(DML)(三) 4 ...

  5. 计算机系统的备份与还原实验报告,数据库《数据备份与还原》实验报告.doc

    <数据库<数据备份与还原>实验报告.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<数据库<数据备份与还原>实验报告.doc&g ...

  6. 织梦仿站篇_织梦cms数据备份和还原

    Dedecms数据备份与还原 需要备份的东西 图片备份方法 只需要备份 dedecms 安装目录下的 uploads 目录即可. 模板的备份 只需要备份 dedecms 安装目录下的 templet ...

  7. oracle数据备份与还原

    oracle数据备份与还原 备份 exp命令用于把数据从远程数据库服务器导出至本地,生成dmp文件; imp命令用于把本地的数据库dmp文件从本地导入到远程的Oracle数据库中. 1.数据库完全导出 ...

  8. redis主从配置 从而实现数据备份和读写分离

    首先打开cmd,用cd找到你的redis文件夹,我的操作是 在你的第一个redis客户端文件夹配置文件中,搜索port,找到如下位置 端口号设置为6379(默认的.后面一个,两个或者多个客户端分别修改 ...

  9. java 备份 mysql 日志_MySQL 数据备份与还原

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:逆心 链接:https://www.cnblogs.com/kissdodog 公众 ...

最新文章

  1. 点击按钮显示隐藏的表格
  2. DBA工具——DMV——通过sys.dm_exec_procedure_stats查看存储过程执行信息
  3. Android --- Serializable 接口与 Parcelable 接口的使用方法和区别,怎么选择?
  4. 实用工具---制作试卷
  5. 对require四种引入方式的认识
  6. 斯坦福大学深度学习视频(CS231n课程)
  7. Netty writeAndFlush() 流程与异步
  8. 论文浅尝 - COLING2020 | 桥接文本和知识的多原型嵌入在少样本关系三元组抽取中的研究...
  9. python web开发项目 源码_Python + Flask 项目开发实践系列七
  10. Hadoop怎么了,大数据路在何方?
  11. 一般左边后台点击收缩展开的效果
  12. java 代码解析工具_改善 Java 代码质量的工具与方法
  13. 使用XUtils进行文件的断点下载
  14. 当关闭winform窗体时触发
  15. mysql是怎样工作的_MySQL系列:一句SQL,MySQL是怎么工作的?
  16. 科学计算机度转弧度,角度弧度换算器在线(70°角度转换弧度)
  17. 创新创业技术路线怎么写_2016如何撰写创新创业项目申请书.ppt
  18. postgresql 中文排序
  19. Windows任务计划定时运行程序的配置方法
  20. 完全卸载 OneDrive / 重装 OneDrive / 解决“已经安装了 OneDrive”

热门文章

  1. PHP yii 框架源码阅读(二) - 整体执行流程分析
  2. javascript 控制弹出窗口
  3. sublime python配置运行
  4. MySQL的常见存储引擎介绍与参数设置调优(转载)
  5. Siamese Network理解
  6. POJ 1986 Distance Queries(LCA)
  7. Solr6.1.0Windows安装步骤
  8. (十一)Jmeter另一种调试工具 HTTP Mirror Server
  9. WCF中使用控件的委托,线程中的UI委托
  10. 有关堆栈溢出(in vs 2005)的读书笔记--堆栈中 申请大数组