首页 > 数据库 >redis备份与恢复

redis备份与恢复

时间:2022-12-12 12:00:40浏览次数:49  
标签:aof cjcos02 恢复 备份 redis 6379 conf rdb

版本:4.0.14

持久化:RDB+AOF

1、RDB相关参数:

dbfilename dump.rdb
dir /redis/data

2、AOF相关参数:

appendonly  yes
appendfilename appendonly.aof
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

3、生成测试数据

127.0.0.1:6379> set name cjc
OK
127.0.0.1:6379> set xxx 123
OK
127.0.0.1:6379> set ccc www
OK
127.0.0.1:6379> keys *
1) "name"
2) "ccc"
3) "xxx"

4、备份数据库

[redis@cjcos02 data]$ ls
appendonly.aof dump.rdb
[redis@cjcos02 data]$ cp * ../bak/
[redis@cjcos02 data]$ ls -lrth ../bak/
total 8.0K
-rw-rw-r-- 1 redis redis 130 Dec 5 09:52 dump.rdb
-rw-r--r-- 1 redis redis 259 Dec 5 09:52 appendonly.aof

5、模拟误删除键

127.0.0.1:6379> del key xxx
(integer) 1
127.0.0.1:6379> keys *
1) "name"
2) "ccc"

恢复1:

通过rdb备份进行恢复

停库

127.0.0.1:6379> shutdown

将dump.rdb备份还原

[redis@cjcos02 data]$ cp ../bak/dump.rdb .

启动

[redis@cjcos02 conf]$ redis-server redis.conf


数据没有恢复,因为aof优先级高于rdb,启动数据库时优先加载aof文件

[redis@cjcos02 conf]$ redis-cli 
127.0.0.1:6379> keys *
1) "ccc"
2) "name"

恢复2:

通过aof进行恢复

停库

127.0.0.1:6379> shutdown

将aof备份还原

[redis@cjcos02 data]$ cp ../bak/appendonly.aof .

启动

[redis@cjcos02 conf]$ redis-server redis.conf

数据恢复成功

[redis@cjcos02 conf]$ redis-server redis.conf
[redis@cjcos02 conf]$ redis-cli
127.0.0.1:6379> keys *
1) "name"
2) "ccc"
3) "xxx"


6、如何强制优先以rdb文件加载?

1.破坏当前aof文件

停库

127.0.0.1:6379> shutdown

重命名

[redis@cjcos02 data]$ mv appendonly.aof appendonly.aof_bak

启库,生成了一个空的aof文件

[redis@cjcos02 conf]$ redis-server redis.conf
[redis@cjcos02 data]$ ls -lrth
total 8.0K
-rw-r--r-- 1 redis redis 259 Dec 5 09:57 appendonly.aof_bak
-rw-rw-r-- 1 redis redis 124 Dec 5 10:00 dump.rdb
-rw-r--r-- 1 redis redis 0 Dec 5 10:01 appendonly.aof

数据全部丢失,原因是数据库加载了新生成的aof空文件

[redis@cjcos02 conf]$ redis-cli
127.0.0.1:6379> keys *
(empty list or set)

并且当前的dump.rdb数据也会根据空的aof文件进行更新,导致数据全部丢失

2.关闭aof

先恢复刚才丢失的数据

[redis@cjcos02 data]$ cp ../bak/dump.rdb .

停库

127.0.0.1:6379> shutdown

关闭aof

[redis@cjcos02 data]$ vi ../conf/redis.conf
appendonly no

启库

[redis@cjcos02 conf]$ redis-server redis.conf
[redis@cjcos02 conf]$ redis-cli
127.0.0.1:6379> keys *
1) "fsd"
2) "age"
3) "name"
4) "xx"

总结

1.redis数据持久化有rdb和aof,因为aof数据更新一些,所以如果rdb和aof都开启了,启动redis优先加载aof文件。

2.备份时可以将rdb和aof都备份走。

3.如果rdb和aof都开启了,启动时想以rdb加载redis,千万不能采用删除或重命名aof的方式,熟悉oracle的都知道,参数文件优先加载spfile,如果希望优先加载pfile,可以重命名spfile,但是在redis里千万不能这么搞,如果这么操作,redis启动后会生成一个空的新aof文件,并加载到redis里,并以新的aof文件更新rdb文件,最终导致数据丢失。

正确的方式是通过参数关闭aof。


标签:aof,cjcos02,恢复,备份,redis,6379,conf,rdb
From: https://blog.51cto.com/u_15576159/5929351

相关文章

  • mac brew 安装redis
    1使用mac的包管理工具brew一行命令搞定安装。若未安装brew,命令行先输入以下命令安装brew。(brew是Mac下的一个包管理工具,类似于centos下的yum,可以很方便地进行安装/......
  • kestrel网络编程--开发redis服务器
    1文章目的本文讲解基于kestrel开发实现了部分redis命令的redis伪服务器的过程,让读者了解kestrel网络编程的完整步骤,其中redis通讯协议需要读者自行查阅,文章里不做具体解......
  • Redis
    Nosql为什么使用Nosql大数据时代!!普通的数据库无法进行数据分析!Hadoop(2006)。历史发展:1、单机MySQL时代(90年代),一个网站的访问量一般不会太大,单个数据库完全够用......
  • redis常用命令大全
    1.基于内存的key-value数据库2.基于c语言编写的,可以支持多种语言的api//set每秒11万次,取get81000次3.支持数据持久化4.value可以是string,hash,list,set,sortedset使用......
  • 使用 dragonflydb 作为godns 的redis 存储
    玩法没变,可以参考我以前写的,主要是调整了redis为dragonflydb测试下参考docker-compose文件version:"3"services:redis:image:docker.dr......
  • 如何基于 Redis 实现分布式锁
    什么是分布式锁分布式锁:不同进程必须以互斥方式使用共享资源的一种锁方法实现。实现分布式锁的基础互斥。任何时刻,只有一个客户端持有锁。无死锁。最终总是有可能获得......
  • SQL 问题与解答 - 数据库移动、性能优化、备份和镜像
    PaulS.Randal新阵列移动日问:我们当前的RAID很快就填满了,因此需要将一些SQLServer2005数据库移到其他位置。新阵列已准备就绪,并且我一直在为移动数据库作准备。我刚......
  • 持久化的配置都不知道,也敢说精通Redis?
    前言所谓持久化可以简单理解为将内存中的数据保存到硬盘上存储的过程。持久化之后的数据在系统重启或者宕机之后依然可以进行访问,保证了数据的安全性。Redis有两种持久......
  • 浅谈Redis大Key与热Key
    如何定义大Key和热Key如何定义大Key如何定义热Key大Key和热Key产生的原因大Key和热Key有哪些危害大Key的危害热Key的危害如何发现大Ke......
  • 持久化的配置都不知道,也敢说精通Redis?
    前言所谓持久化可以简单理解为将内存中的数据保存到硬盘上存储的过程。持久化之后的数据在系统重启或者宕机之后依然可以进行访问,保证了数据的安全性。文末有福利。Re......