redis误同步恢复

redis主备同步非常方便,通过slaveof命令即可同步。上周应用切换了redis,想让新的redis和旧的redis进行数据同步,结果把新redis中其他应用已经写入的所有数据都删除了。。。这里记录下恢复方法。

首先先恢复redis的dump文件。还好现在阿里云弹性计算集群给每个镜像每天都进行了备份,通过操作前一天的备份镜像,快照制作当时的整个redis目录复制了出来,作为恢复的基础。

然后将恢复回来的文件再复制一份备份,原先那份修改redis的配置文件,修改启动端口(我从默认的6379改成了6479),然后启动旧的redis,成功将当时的dump文件载入到新的redis实例中。

查询到redis有migrate命令,能够将key迁移到另外一个redis实例中(具体参考这里)。通过bash命令,循环的将备份的实例所有key,都试图通过migrate命令迁移到新的redis中。

迁移过程中,迁移成功的key,在旧的实例中会被删除,失败的key,可以看见失败原因都是key is busy。也就是说,要迁移的key在新的实例中已经存在了。

和使用方确定了所有已经存在的key,是hash类型的,都是要保留的数据。因此,通过一个简单的shell脚本,读取备份实例中hash类型key,并添加到新的redis中。bash脚本为:
[cce lang=”bash”]
#!/bin/bash
OLD_REDIS="./redis-cli -p 6479"
NEW_REDIS="./redis-cli"

KEYS=`$OLD_REDIS keys '*'`

for k in $KEYS
do
key_type=`$OLD_REDIS type $k`
if [ $key_type = "hash" ]; then
hash_keys=`$OLD_REDIS HKEYS $k`
for hash_key in $hash_keys
do
hash_value=`$OLD_REDIS HGET $k $hash_key`
$NEW_REDIS HSET $k $hash_key $hash_value
echo "merge $k $hash_key to new redis"
done
#eval "$OLD_REDIS DEL $k"
fi
done
[/cce]
逻辑非常简单,就是先通过keys命令获取到所有迁移失败的key,然后通过type命令获取类型。如果是hash类型的key,遍历所有的hash key,然后读取出一个key下所有的键值对,并通过hset命令放到新的redis实例中。最后将合并完成的key从备份实例中删除。这里由于业务上只需要合并hash类型的,其他容器类型(list, set等)也可以通过类似的方式做新老合并。

转载自:https://coolex.info/blog/427.html

时间: 2024-08-03 02:44:07

redis误同步恢复的相关文章

java web项目用redis怎样实现oracle缓存,如何保持oracle和redis的同步?

问题描述 java web项目用redis怎样实现oracle缓存,如何保持oracle和redis的同步? java web项目用redis实现oracle缓存,实现思路是怎样的,怎样保持oracle和redis的同步? 解决方案 可以使用oracle中的row_scn,,从oracle中读出的row_scn和redis中保存的相比,如果大于redis中的就更新redis,如果oracle数据更新,重新从oracle中读一遍出来. 数据库高可用架构(MySQL.Oracle.MongoDB.R

Redis系列之(二):Redis主从同步,读写分离(转)

1. Redis主从同步 Redis支持主从同步.数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制. 2. 配置主从同步 Mater Slave的模式,从Slave向Master发起SYNC命令. 可以是1 Master 多Slave,可以分层,Slave下可以再接Slave,可扩展成树状结构. 2.1 配置Mater,Slave 配置非常简单,只需在slave的设定文件中指定master的ip和port Master: test166 修改设定文件,服务绑定到ip上 1

云数据库Redis版备份恢复解决方案上线,数据可靠性全面升级!

阿里云云数据库Redis版致力于为用户提供稳定可靠.性能卓越.可弹性伸缩的数据库服务,并提供全套的容灾切换.故障迁移.在线扩容.性能优化的数据库解决方案. 云数据库Redis版采用双击热备的架构保证服务高可用,并且提供了持久化机制来保证数据可靠性.但是随着越来越多的业务开始使用Redis作为最终的持久化存储引擎,用户对于数据可靠性就提出了更高的需求.经过一段时间的打磨,我们正式推出了Redis备份恢复解决方案,全面的升级云数据库Redis的数据可靠性.   1.     数据备份一键式操作 由于

误GHOST、误一键恢复系统时如何处理

[适用] 个人机.部分品牌机(具备一键恢复功能) [灾难过程及症状] 1.个人机采用GHOST恢复系统,恢复系统后发现整个硬盘变成一个大分区,原扩展分区全 部不见. 2.用品牌机带一键恢复光盘恢复系统后,整个硬盘变成一个大分区,原扩展分区全部不见. 3.本例不适用恢复系统时,选错目标分区;     本 例不适用备份系统时,应备份成镜像文件,选错为其他分区. [应急处理] 1.若原C分区小于3GB,现大分区为NTFS(FOR WINXP以上系统),系统万万不可启动,需立 即分离系统寻求专业数据恢复

iphone6误照片怎么恢复?ios8误照片恢复方法

1)在iphone6 中我们找到"照片" 然后我们再点击[相簿]在打开的[相簿]的下面会你会看到有一个[最近删除]我们点击它进入. 2)然后我们点击进入该相薄中,点击右上方的选择选项,你便可以选择想要恢复的照片或视频,然后再点一下右下方的恢复功能即可 友情提示,如果你在这里面再把照片删除那么就在这里面找不到删除的照片了哦,当然有些照片我们删除之后也需要到这里面来删除哦,这可是回收站呀.

Redis内核基于时间点的备份恢复和基于AOF日志的增量同步机制设计

直播视频回顾 Redis内核支持基于时间点的备份恢复 Redis内存数据库,须有一种机制能够把内存中的数据持久化到硬盘上,再将硬盘中数据备份到备份系统中,才能去做恢复.Redis原生的持久化机制包括RDB持久化和AOF持久化两种. RDB持久化 RDB持久化触发方式有两种: 手动触发:执行BGSAVE命令: 自动触发:配置SAVE选项,在指定时间内发生指定次数的key修改,自动进行后台RDB SAVE. RDB持久化流程如下: 在做RDB SAVE时需要fork一个子进程,每次RDB SAVE生

Veeam Backup & Replication 8 同步与恢复

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1731392 Veeam Backup & Replication 同步不同于备份的机制,同步是直接抓取虚拟机同步到另一端,相当于一次全备,然后根据计划任务做快照,并根据配置保留最近几次快照用于failover恢复,本例是从61ESXi主机同步到70ESXi 主机. 1,添加同步任务 两个ESXI主机,将61上的Oracl

简单粗暴的Redis数据备份和恢复方法_Redis

示例 目标:把服务器CentOS上的redis数据复制到Mac机上 步骤: 在CentOS上找dump文件位置 vi /etc/redis.conf dbfilename dump.rdb dir /var/lib/redis 说明文件在 /var/lib/redis/dump.rdb 在mac上查找dump文件位置 vi /usr/local/etc/redis.conf dbfilename dump.rdb dir /usr/local/var/db/redis 拷贝服务器上的dump.r

超强、超详细Redis数据库入门教程

[本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用redis 4.学会安装redis 5.学会启动redis 6.使用redis客户端 7.redis数据结构 – 简介 8.redis数据结构 – strings 9.redis数据结构 – lists 10.redis数据结构 – 集合 11.redis数据结构 – 有序集合 12.redis数据结构 – 哈希 13.聊聊redis持久化 – 两种方式 14.聊聊redis持久化 – RDB 15.聊聊redis持