MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk.

MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk.

前言

完整报错如下:

Error in execution; nested exception is
 io.lettuce.core.RedisCommandExecutionException: 
MISCONF Redis is configured to save RDB snapshots, 
but it is currently not able to persist on disk. 
Commands that may modify the data set are disabled, 
because this instance is configured to report errors during 
writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). 
Please check the Redis logs for details about the RDB error.

意思就是写快照的时候出问题了,没办法给你持久化了。

莫名其妙服务器上的redis报这个错误。从字面理解来看是持久化的问题,但是导致这个错误的原因有很多,具体还是得看下日志才行。一般的排错流程是: 读懂报错 -> 查看日志 -> 搜索相关错误 -> 定位错误 -> 解决。 问题在于,不是我安装的redis,而这个框架默认不记录日志,不幸的是,安装的人没给配置日志。。。。

配置日志

既然没有的话,那就先配置一下吧。首先查看服务器的redis是否在正常运行,输入

ps -ef | grep redis

我的输出如下


root      8642  5461  0 09:16 pts/0    00:00:00 grep redis
root     26157     1  0  2022 ?        02:06:06 redis-server 127.0.0.1:6379   

有两个,第一个是我们ps -ef | grep redis这条命令的进程,下面的就是redis服务的进程了。所以服务是开启的。我们先输入以下命令关闭服务(得确定当前没有什么项目在用,不然要挨骂)

kill -9  26157

我这里的26157是上面的redis-server的进程。然后进到redis的安装目录下,找到redis.conf文件,打开搜索找到logfile这一栏
在这里插入图片描述
这里我使用的XFtp操作连接的服务器,所以可以使用记事本操作。在双引号里面设置日志存储路径。比如

/home/workhome/zs/redis/redis.log

然后保存,并且以该配置文件启动redis服务,在redis安装目录下,输入

redis-server redis.conf

再查看一下有没有启动

ps -ef | grep redis

然后再去设置的目录下 查看有没有日志生成
在这里插入图片描述
好了现在日志配置好了。然后复现一下错误,只要使用了redis应该还是会报刚刚的的错误,再查看日志就好了。

复现问题后,打开日志:

 Write error saving DB on disk: No space left on device

这就很明显了,就是磁盘空间不够了。删除一些东西就行。

运行查看磁盘的信息

df -h

假设输出如下信息:

文件系统	 容量  已用    可用   已用% 挂载点
/dev/**  50G   50G     0     100%  /
tmpfs    50G   40G     10G   80%   /dev/sxm
/dev/**  5T    2T      3T    40%   /boot
/dev/**  200M  260K    200M  1%    /boot/efi

这里也简单说一下,各列的意思:

  1. 文件系统:表明当前的文件系统位于哪里,唯一,可以看作windows的盘符(C盘、D盘、E盘)。
  2. 容量:最大可容纳的大小。各个文件系统独立
  3. 已用:已使用的大小。
  4. 可用:剩余大小。
  5. 已用%:已用百分比。
  6. 挂载点:这个可以看作文件系统在当前系统里的映射。就是文件系统是不显示的,显示给用户的是挂载点

需要注意的是,左侧的文件系统与右侧的挂载点对应。比如第一个的挂载点/ ,也就是根目录下,大小为50G,但是第二个文件系统的挂载点为:/dev/sxm也在根目录下,大小为60G。你可能已经发现了,根目录总容量才50G,那它的子目录怎么能有60G大小呢?没错,但是文件系统让它们独立

也就是一个文件系统的容量大小不包含其他文件系统的挂载点

简而言之就是/目录下的大小,不包含/dev/sxm/boot/boot/efi等挂载点文件的大小。

现在我们继续,很明显我们需要排查的是redis安装目录所在的挂载点,并且该挂载点是满的。我这里毫无疑问是第一个

切换到根目录下,使用ls命令查看所有文件夹。

然后执行

du -sh *

会统计各个文件夹的大小。不过需要注意的是,如果当前目录下包含其他过大的挂载点,比如我这里的第三个挂载点有2T,可能就会等很久,或者卡死。如果遇到这种情况,使用ctrl + c强制结束进程。跳过该挂载点。

然后对后续的文件单个统计,假如我根目录下文件为:

bin
etc
boot
home
lib

那么对于boot后面的文件夹就需要挨个统计了,比如统计home的大小

du -sh home

如果出现跟最大容量很接近的文件夹,比如我的是local文件夹下面有44G
在这里插入图片描述
那就就进去,然后再重复上面的操作,统计该文件夹下所有文件的大小。直至找到是哪些大文件导致的磁盘空间不够

我这里是最后找到的是tomcat的catalina.out日志文件,然后我给删除了。当然了,如果你对该服务器不熟悉的话,不认识找到的文件,还是建议问问负责这个服务器的人,看看能不能删

删除以后重启了下tomcat服务器,就没问题了。

如果日志报错跟我的不一样,大家也可以参考以下这位的文章: Caused by: io.lettuce.core.RedisCommandExecutionException 记一次Redis报错修复
删除文件后磁盘空间未释放,参考这个: no space left on device(磁盘空间不足)----记录备忘

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 执行错误;嵌套异常是io.lettuce.core.RedisCommandExecutionException:Misconf Redis已配置保存RDB快照,但当前无法持久化到磁盘。可能修改数据集的命令已被禁用,因为此实例配置为在RDB快照失败时报告写入错误(stop-writes-on-bgsave-error选项)。请检查Redis日志以获取有关RDB错误的详细信息。 ### 回答2: 这段代码的意思是出现了执行错误,嵌套的异常是 io.lettuce.core.rediscommandexecutionexception:misconf redis 配置为保存 rdb 快照,但当前无法持久化到磁盘。可能会修改数据集的命令被禁用,因为该实例配置为在 rdb 快照失败时报告写入错误 (stop-writes-on-bgsave-error 选项)。请检查 redis 日志以获取有关 rdb 错误的详细信息。 简单来说,这段代码是关于 Redis 数据库的一个错误提示信息。Redis 配置为保存 RDB 快照,但目前无法将其持久化到磁盘上。这意味着如果 Redis 实例无法持久化数据,则会停止所有修改数据的命令并报告写入错误。 通常,Redis 需要定期通过 RDB 快照来保存数据库中的数据。这是因为 RDB 快照是一个二进制文件,可以在 Redis 重启时加载,以便恢复之前保存的数据。但如果无法保存 RDB 快照,则可能会出现数据丢失的情况。 这个错误提示建议您检查 Redis 日志以查看有关 RDB 错误的详细信息,以便找出出现此问题的根本原因并解决问题。检查 Redis 日志是查找此错误的最佳方法,因为它通常会提供有关出现问题时 Redis 虚拟内存的详细信息。 ### 回答3: 这个错误信息是Redis执行时出现的异常,错误信息中提到了嵌套异常是io.lettuce.core.rediscommandexecutionexception。具体的错误信息是:misconf redis is configured to save rdb snapshots,but it is currently not able to persist on disk. 这个意思是Redis被配置为保存RDB快照,但是它当前无法将快照持久化到磁盘。在这种情况下,会禁用一些可能修改数据集的操作,因为该实例被配置为在RDB快照失败时报告写入错误(stop-writes-on-bgsave-error选项)。因此,我们需要检查Redis日志以了解有关RDB错误的详细信息。 为了解决这个问题,我们需要查看Redis的配置文件,检查是否正确地配置了RDB快照保存选项,同时查看服务器磁盘空间是否足够,如果磁盘空间不足,则Redis无法将快照持久化到磁盘上。 此外,我们还需要检查Redis的日志文件以了解有关RDB错误的详细信息。在日志中,我们可以找到错误的具体原因和位置,以更好地解决问题。 最后,如果我们无法解决这个问题,我们可以考虑联系Redis的支持团队或者社区寻求帮助。他们会给出更专业的建议并帮助我们解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值