这次网站的故障出现的比较突然,没有任何防备,有种突如其来的感觉。这是一台阿里云服务器,采用wdcp的nginx+apache+mysql的方式运行。一位同事在对web目录进行压缩后,由于web目录有很多图片,导致压缩包很大。如果全部压缩的话在4G左右,如果在龟速的网络下,全部压缩下载是个非常痛苦的事情。由于是在wdcp的管理界面中进行的压缩,点击全部压缩后整个web应用都没反应,过了一会干脆直接访问不了。由于web访问页面无法打开,wdcp也访问不了,于是尝试直接用SecureCRT连服务器。可喜的是SecureCRT可以连上服务器。于是有了下面一系列的操作。

  1、查看nginx服务是否启动

ps -ef|grep nginx

  发现nginx服务没有起来,于是启动nginx服务

service ngxind restart

  查看nginx是否启动成功

ps -ef|grep nginx

  此时,nginx已经成功启动

root              : ?        :: nginx: master process /www/wdlinux/nginx/sbin/nginx -c /www/wdlinux/nginx/conf/nginx.conf
www : ? :: nginx: worker process
www : ? :: nginx: worker process
www : ? :: nginx: worker process

  此时刷新网页,仍然无法访问

  2、检查apache是否正常

ps -ef|grep httpd

  发现apache没有起来,于是启动apache

service httpd restart

  查看启动结果

ps -ef|grep httpd
root : ? :: /www/wdlinux/apache/bin/httpd
www : ? :: /www/wdlinux/apache/bin/httpd
www : ? :: /www/wdlinux/apache/bin/httpd
www : ? :: /www/wdlinux/apache/bin/httpd
www : ? :: /www/wdlinux/apache/bin/httpd
www : ? :: /www/wdlinux/apache/bin/httpd
root : ? :: /www/wdlinux/wdapache/bin/httpd
wdcpu : ? :: /www/wdlinux/wdapache/bin/httpd
www : ? :: /www/wdlinux/apache/bin/httpd
wdcpu : ? :: /www/wdlinux/wdapache/bin/httpd

  再次刷新页面,此时报一个莫名其妙的异常,说文件不存在。由于涉及到具体网站和文件,这里就不贴详细异常了。

  于是看看这些文件是否真的少了,然而查找的结果是文件一个都没少。于是发呆了一会,感觉没道理。怎么会报这样的异常呢?郁闷中。。。

  又过了一会,看了异常的一个文件,报错的都是一些数据库变量。想了下,这是一个ecshop的程序,会不会是缓存被破坏了的原因呢?于是到将缓存目录的内容都删掉

rm -rf ./temp/static_caches
rm -rf ./temp/caches

  注意,这里用到了rm -rf,目录开头是“./”而不是“/”,不要自己坑自己了;到时候出问题了呼天喊地,再大声的“我爸是李刚”也没用。

  再次刷新页面,此时出现一个异常是

ECSHOP info: Can't Connect MySQL Server(localhost:XXXX)!

  3、启动mysql

service mysqld restart

  执行了上述命令后,等了很久都没反应,心急如焚

MySQL manager or server PID file could not be found!
Starting MySQL.............................................................................................................................

  于是ctr + c 结束掉;再次运行,仍然如此。于是看看进程在不在

ps -ef|grep mysqld

  发现进程是在的,但就是重启不成功。于是网上查了下,各种说法和原因都有。也有说是mysql目录权限的问题,于是

chown -R root:root /www/wdlinux/mysql-5.1.

  再次检查,仍旧没有解决。有些说kill掉进程重启就行了,但这并不是我原因做的事情。因为kill掉进程是有风险的。后来又折腾了很久,实在没办法,最后还是选择了将进程kill掉。

  查看进程ID

ps aux |grep mysql*

  将进程kill掉

kill 

  再次查看,进程还在。。。。。,没办法,只能使出必杀技了(总是隐约中感觉到有点不太好)。

kill - 

  再次查看,这会好了,消腾了(好戏还在后头)。

service mysqld restart

  期待的是

service mysqld restart
Starting MySQL... SUCCESS!

  但是现实总是残酷的,

service mysqld restart
ERROR! MySQL manager or server PID file could not be found!
Starting MySQL. ERROR! Manager of pid-file quit without updating file.

  于是网上找了一下,有说是磁盘空间已满、mysql使用的端口已经被占用、binlog日志文件错误、权限问题等等;还有说要删除日志文件data/mysql-bin.index的,再怎么说不能删日志文件呀,磁盘空间也足够,mysql端口也正常。剩下的就是权限问题了

chown -R root:root /www/wdlinux/mysql-5.1.

  再次尝试启动mysql,仍然无果。于是查看了下mysql的var目录,有一个XXXXXXXXX.err的文件,打开看一下

tail - XXXXXXX.err

  末尾的一段是这样的

 :: mysqld_safe Starting mysqld daemon with databases from /www/wdlinux/mysql-5.1./var
/www/wdlinux/mysql-5.1./libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
:: [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
:: [ERROR] /www/wdlinux/mysql-5.1./libexec/mysqld: Can't create/write to file '/www/wdlinux/mysql-5.1./var/XXXXXXXXXXXX.pid' (Errcode: 13)
:: [ERROR] Can't start server: can't create PID file: Permission denied
:: mysqld_safe mysqld from pid file /www/wdlinux/mysql-5.1./var/XXXXXXXXXXXX.pid ended

  Can't start server: can't create PID file: Permission denied,异常仍然说是权限不足。于是

chown -R mysql:mysql /www/wdlinux/mysql-5.1./*

  再次重启

[root@XXXXXXXXXXXXXXXXX mysql-5.1.]# service mysqld restart
ERROR! MySQL manager or server PID file could not be found!
Starting MySQL... SUCCESS!

  我的奥特曼终于出现了,于是刷新下网站页面。一切正常,松了口气。。。

  4、后记

  虽然问题解决了,但是中间还是有很多问题值得思考的。

  a、当碰到这样的问题的时候,其实并没有事先想好一个预案和解决办法,碰到问题马上上来就着手解决。只是脑子里有个大概的思路,问题应该出在哪,然后一步步去解决。这也是解决问题的一种方法,但显然不是最有效和快速的。例如,中间的删除缓存,这一步其实就没什么必要了,因为问题不出在缓存,而处在mysql上。

  b、对于kill -9和rm -rf这种强有力的杀伤性武器,用的时候必须慎重。如果一不小心kill -9导致整个mysql都用不了呢?想想都觉得可怕,还好这次顺利地解决了问题。

  c、wdcp中mysql的var目录需要mysql用户及用户组的权限,也就是说上诉修改mysql目录权限的步骤没有必要。因为这是在没有明确问题所在,又引入了一个新的问题,进而重复解决。说得明白一点就是将简单的问题复杂化了。

  d、对于一些占用资源的操作,建议还是直接用SecureCRT等工具操作较为妥当,避免出现不必要的问题。

  e、上诉的所有操作也许敌不过一条命令,那就是reboot;据说reboot可以解决掉百分之九十的问题。

  f、最后的最后,为什么使用wdcp控制面板压缩会导致这样的问题呢?原因是什么呢?是由于太占用资源导致整个web应用都崩溃掉还是什么原因呢?如果您知道问题所在,请告诉我。

惊魂web应用宕机记一次网站的紧急恢复的更多相关文章

  1. 几台WEB经常宕机,求分析原因

    几台WEB服务器经常宕机,平时运行得好好的,负载也都在2以下,偶尔会突然负高上去就宕机,init 6也无法重启成功 只能echo 'b'>/proc/sysrq-trigger 硬重启才行,dm ...

  2. Keepalived 双机web服务宕机检测切换系统软件

    简介 Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Kee ...

  3. rac库grid目录权限(6751)导致数据库宕机案例 此方法仅用于紧急救助

    问题: 我的rac环境不小心通过chown命令改变了/u01目录及其子目录的权限,导致rac节点2数据库宕掉,sqlplus下打开数据库报错如下: [oracle@node2 ~]$ sqlplus ...

  4. (转)从史上八大MySQL宕机事故中学到的经验

    一.Percona网站宕机事件 震级:3 发生时长:2011年7月11日 持续时长:数日 地点:加州Pleasanton(幸福屯) 宕机原因:Percona网站主服务器上的3块硬盘损坏,同时因为人员变 ...

  5. 【JVM】linux上tomcat中部署的web服务,时好时坏,莫名其妙宕机,报错:There is insufficient memory for the Java Runtime Environment to continue.

    =========================================================================================== 环境: linu ...

  6. 记一次共享内存/dev/shm 小于memory_target 引发的客户DB 宕机问题

    1> 记一次共享内存/dev/shm 小于memory_target 引发的客户DB 宕机问题(处理心得)

  7. 解Bug之路-记一次对端机器宕机后的tcp行为

    解Bug之路-记一次对端机器宕机后的tcp行为 前言 机器一般过质保之后,就会因为各种各样的问题而宕机.而这一次的宕机,让笔者观察到了平常观察不到的tcp在对端宕机情况下的行为.经过详细跟踪分析原因之 ...

  8. 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...

  9. 性能测试——记XX银行电票系统上线后宕机问题诊断优化

    四月份我们公司负责的电票系统上线了,这个系统上线比客户方其他系统上线还特殊,是二期改造项目,旧系统数据还要整合抽取到新系统中继续使用,而且该系统不是增量型方式开发上线的,而且全部开发完后全国上线的,这 ...

随机推荐

  1. 【POJ 3320】Jessica's Reading Problemc(尺取法)

    题 题意 P个数,求最短的一段包含P个数里所有出现过的数的区间. 分析 尺取法,边读边记录每个数出现次数num[d[i]],和不同数字个数n个. 尺取时,l和r 代表区间两边,每次r++时,d[r]即 ...

  2. BZOJ-1087 互不侵犯King 状压DP+DFS预处理

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2337 Solved: 1366 [Submit][ ...

  3. 浅谈Logistic回归及过拟合

    判断学习速率是否合适?每步都下降即可.这篇先不整理吧... 这节学习的是逻辑回归(Logistic Regression),也算进入了比较正统的机器学习算法.啥叫正统呢?我概念里面机器学习算法一般是这 ...

  4. IOS基础之 (七) 分类Category

    一 Category 分类:Category(类目,类别) (OC有) 命名:原来的类+类别名(原来的类名自动生成,只要写后面的类别名,一般以模块名为名.比如原来类 Person,新建分类 Ct,新建 ...

  5. KindEditor提交用jquery获取不到数据的解决方法

    http://www.douban.com/note/257795704/ 如果说用php接收的话,在HTML中这样写就可以了var editor;KindEditor.ready(function( ...

  6. MVC4笔记 Area区域

    mvc4.0新增的area区域机制,可以协助你在架构较为大型的项目,让独立性较高的部分功能独立成一个MVC子网站,以降低网站与网站之间的耦合性,也可以通过area的切割,让多人同时开发同一个项目时候, ...

  7. C# ServiceStack.Redis 操作对象List

    class Car { public Int32 Id { get; set; } public String Name { get; set; } static void Main(string[] ...

  8. ios 关联对象运用 objc_setAssociatedObject

    点按钮的时候,给alertView添加一个关联对象(被点击这个按钮), objc_setAssociatedObject(alert, &kRepresentedObject, sender, ...

  9. linux 优化&安全运维&黑客攻防

    优化: 可删除用户:adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher.   :userdel games 可删除组:adm,lp,ne ...

  10. mono 3.4.0 make install的时候出现"找不到 Microsoft.Portable.Common.targets 文件”的错误提示解决方法

    如果在这时就进行配置安装Mono的话,会在make阶段得到一个“找不到 Microsoft.Portable.Common.targets 文件”的错误提示, 所以需要先进行如下处理: #> c ...