专栏首页技术小牛服务器意外重启后redis启动失败或无法连接的问题解决办法

服务器意外重启后redis启动失败或无法连接的问题解决办法

今天开发服务器因机房断电重启了,然后发现所有的PHP接口都报错:

session_write_close(): Failed to write session data using user defined save handler. (session.save_path...

但实际上我们一直是用redis来保存Session信息的,道理上不会用到这个save_path的配置项,在配置没改过的情况下报这个错,初步判断应该是redis服务器出了问题(redis服务器是在另一台机子上的),因为redis连不上所以框架自动切换到了使用文件系统存储Session的第二选项,所以根源还是在redis服务器上

用Redis的客户端工具(Redis Desktop Manager)尝试连接redis服务器,连接被拒绝了,看来确实是redis服务的问题,于是ssh连接上了redis服务器,用sytemctl status redis查看了状态,Active那里是绿色的,显示的是:Active: active(exited),貌似没问题(这里有坑,其实状态是不正常的,但因为之前没留意正常的状态是怎样的,以为绿色就是正常的,所以没及时发现这个问题,下面会具体说明情况),如下图所示:

,但为什么连不上呢?

于是打算去看看redis的日志,如果你不知道日志保存的路径,可以去配置文件里面看,属性名是logfile,打开日志后确实看到了一个报错:Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename>,看来是aof文件在意外断电时文件格式被损坏了,如果不知道redis-check-aof命令在哪里,可以通过whereis redis-check-aof查找,找到后复制下这个目录,然后进入到aof文件所在目录,执行命令将文件修复,如我执行的命令是这样的:/usr/local/bin/redis-check-aof --f appendonly.aof

接下来重启redis,本来以为能顺利连上了,但仍然连接失败,但有个变化是redis的日志里没有出现aof格式错误的记录了,于是用systemctl status redis看了一下redis的状态,显示的仍然是Active:active(exited),想了一下,这个exited可能是不正常的,于是找了另外一台装了redis的机子并正常运行的机子执行这个命令看了一下,原来active(running)才是正常的,如下图所示:

在网上搜索了一下,这个问题将pid文件删掉,找到原来的进程杀死后再重新启动就行了,操作命令如下:

#删除pid文件

  cd /var/run

  rm redis_6379.pid 

#删除dump.rdb(内存快照)文件

  cd /var/lib/redis/6379

  mv dump.rdb dump.rdb_bak

#之后查看是否还有redis服务启动

  ps -ef |grep redis

  kill -9 进程id(如有)

  systemctl start redis

至此,原来redis里的数据顺利恢复,也能正常连接了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL设置log-bin后服务器重启失败的解决办法和说明

    MySQL中二进制日志功能默认是关闭的,查看各种开启方式后,确定在配置文件中加入如下配置来开启该功能:

    kirin
  • Redis 主从复制以及主从复制原理

    在现有企业中80%公司大部分使用的是redis单机服务,在实际的场景当中单一节点的redis容易面临风险。

    芋道源码
  • 【深度知识】Redis 主从复制以及主从复制原理

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日...

    辉哥
  • 服务器增加内存后无法重启数据库的问题及解决 (36天)

    前几天生产环境需要做服务器的扩容,把原本64G的内存扩到了128G.然后调整了一些其他的kernel参数,在此基础上需要调整sga的大小,以便分配更多的缓存。 ...

    jeanron100
  • Redis 源码 bug 深入定位过程分享

    Redis 3.2.8及以前的版本中 AOF 重写过程存在fd泄漏的风险。本文描述了一次与此相关的 fd泄漏问题的定位过程,并结合源码分析了问题产生的根源。

    廖可知
  • 史上最LOW的PHP连接池解决方案

    大多数 PHP 程序员从来没有使用过连接池,主要原因是按照 PHP 本身的运行机制并不容易实现连接池,于是乎 PHP 程序员一方面不得不承受其它程序员的冷嘲热讽...

    猿哥
  • Redis事务和乐观锁原理详解

    MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事务相关的命令。事务可一次执行多个命令, 并且带有以下两个重要的保证:

    JavaEdge
  • Redis主从复制原理总结

    和Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结...

    HUC思梦
  • 这些 Redis 面试题虽然简单,但是面试常常问到

    Redis应该算面试中必问的一个知识点,但是发现很多童鞋并不熟悉这块,这篇就常见的一些问题做一些整理,有不对的地方欢迎留言指正!

    咸鱼学Python
  • 使用@Autowired注入父类对象时会报错,找到多个bean对象处理

    当一个父类拥有子类时,通过@Autowired注入父类对象时会报错,无法区分注入的对象是父对象还是子对象。

    bug专8
  • 高可用Redis服务架构分析与搭建

    Spark学习技巧
  • 教你用 3 台机器搞定一个 Redis 高可用架构

    基于内存的 Redis 应该是目前各种 Web 开发业务中最为常用的 key-value 数据库了。

    Java技术栈
  • 继续项目实战,集成Redis分布式锁(大神勿进)

    本文是我们小项目的第三篇文了,本次我们来把分布式锁应用到我们的项目中,使用Redis实现的分布式锁功能,这一切都是为我们往后的工作做铺垫,希望大家能get到分布...

    田维常
  • Redis~事务与复制

    用户2196435
  • 如何搭建高可用Redis服务

    作者: 漫步CODE人生 来自:cnblogs.com/scode2/p/8670980.html 题记 基于内存的Redis应该是目前各种web开发业务中最为...

    架构师小秘圈
  • 高可用 Redis 服务架构分析与搭建

    基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据...

    JAVA高级架构开发
  • 3台机器轻松搭建一个高可用Redis服务架构

    最近在我的项目中自己搭了一套小型的“高可用”Redis 服务,在此做一下总结和思考。

    Java高级架构
  • 高可用Redis服务架构分析与搭建!

    基于内存的Redis应该是目前各种Web开发业务中最为常用的Key-Value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据...

    Java后端技术
  • 高可用Redis服务架构分析与搭建

    基于内存的Redis应该是目前各种Web开发业务中最为常用的Key-Value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据...

    Bug开发工程师

扫码关注云+社区

领取腾讯云代金券