问题描述
在你启动redis-server的时候,会提示下面的错误。
The RDB file contains module data I can't load: no matching module 'MBbloom--'
大概意思:dump.rdb持久化数据,不能加载一个不匹配的布隆过滤器。这个时候,你就要思考,启动redis-server服务的时候,本次读取的dump.rdb是哪个目录下的,是当前目录下的,还是你在6379.conf目录里dir配置的目录。然后找到这个对应的rdb文件。问题就出在它这里。
解决思路
某篇几十万浏览的文章,就俩字“重启”,然后给一个不知所云的链接,显然并没有从根本上解决问题。
解决步骤
问题根源
1.首先要了解,启动redis-server服务时,它的持久化dump.rdb文件存储位置是怎么回事?
答:rdb的存储位置,是在redis源码解压目录的根目录下redis.conf里由“dir ./” 参数来控制的,也就是说,你在哪个目录启动redis-server服务(前提是没有指定conf,使用默认的redis.conf),dump.rdb就会自动生成在哪个目录。
2.那么问题来了,自己在使用redis的时候,通常会复制一份redis.conf,在里面各种修改,还经常重名为6379.conf,诸如此类。
3.所以,在我们反复做Redis集群搭建、Redis分片代理predixy、twemproxy代理、以及各种布隆过滤器、布谷鸟过滤器,各种测试时有时候使用默认redis.conf启动redis-server,有时候使用自己配置的6379.conf,启动redis-server,需要使用代理就修改这里,需要使用集群就修改那里。
dump.rdb文件被各种redis-server启动方式反复读取戏弄,不甘受辱,终于如愿以偿的看到了上述错误,RDB和MBbloom不匹配,sorry 我罢工了你看着办!!。
解决办法
1.重启不是万能的,如果问题没有从根源解决,下次还会出现。
2.猜测是dump.rdb出了问题,就找到各个dump.rdb (包含你自己配置的dump.rdb存储路径,比如你习惯上把它放到/var目录的某个位置)。
3.测试数据
如果里面都是你的测试数据,找到这些dump.rdb都予以删除。
4.正式数据
使用 ./redis-check-aof --fix appendonly.aof 这样的一些修复命令,尝试修复一下。