Redis rdb文件手动合并(单库,只有db0)

线上服务使用的阿里云的集群版本redis服务,数据量1千万,rdb文件4GB。

线下测试环境只有单节点redis,需要导入线上全量数据。

8个rdb文件,每个500MB。

RDB格式如下:

头5个字节是字符REDIS。

之后4个字节代表版本号,阿里的版本分别是 00 00 00 06

之后2个字节 FE 00,FE是标识 00是数据库,还好我们只有一个库。

最后的结尾9个字节 。

FF 加上8个字节的CRC64校验码(实在没空弄,后来偷了一个懒) 。

一、生成对应的文件

#文件1 大小566346503,截取尾部的9个字节

dd bs=1 if=src_1.rdb of=1.rdb count=566346494

#文件2 大小570214520,跳过头部的11个字节,再截取尾部的9个字节

#dd bs=1 if=src_2.rdb of=2.rdb skip=11 count=570214400

...

#文件8 大小569253061,跳过头部的11个字节,再截取尾部的8个字节,保留FF。

dd bs=1 if=src_8.rdb of=8.rdb skip=11 count=569253042

二、合并文件

cat 1.rdb > dump.rdb

cat 2.rdb >> dump.rdb

...

cat 8.rdb >> dump.rdb

备份文件合并完毕。

三、检查备份文件

redis-check-rdb dump.rdb 

应该会提示没有crc校验。

四、修改配置文件

因为数据库备份文件里面不包含crc64的校验码,配置文件中关闭选项。

rdbchecksum no

数据恢复到此结束,此方法只适合用于临时恢复和导出数据,数据完整性不敢保证。


参考的文章

https://github.com/sripathikrishnan/redis-rdb-tools/wiki/Redis-RDB-Dump-File-Format

来源:https://www.jianshu.com/p/097c0b01ea69

评论

匿名说…
可以

此博客中的热门博文

Blogger搭建国内可正常访问博客(超详细教程)

近期折腾 tailscale 的一些心得

个性化推荐从入门到精通

使用GPG Key来证明github每次commit的所有权

Java 认证考试 OCAJP 经验总结

打造一个可国内访问的Blogger(Blogspot)方法

高可用用户中心设计

群晖硬软件的的各种坑及解决方案

星际蜗牛安装黑裙(群晖)制作家用nas

黑群晖硬件选用与兼容列表