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
评论