注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 情定神州
 帮助

一次Mysql故障诊断过程


2008-03-20 18:34:34
 标签:数据库 mysql 故障   [推送到博客圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://sery.blog.51cto.com/10037/66961
一次Mysql故障诊断过程
 
那天因参加MS的新品发布大会,中午就离开办公室,当我正在出租车上前往会场的途中,同事打电话来说主数据库出现写保护错误。这可不得了,所有的应用都靠这个数据库呀,我心里默念:千万不要出漏子,否则就不能参会了!于是我在电话里交代同事重启mysql数据库试试,还好,重启后问题解决。
 
一散会,就赶紧上去找故障原因。这里先描述一下平台环境,把逻辑关系弄清楚。在这个应用中,由一个web前段服务器,一个tomcat应用服务器及一个mysql服务器构成,所有的系统都是linux。用户的请求先到前端的apache服务器,如果请求页面是.jspapache就把请求转交给tomcat服务器,tomcat再从数据库获取数据或向数据库插入记录。这是典型的3层应用逻辑。
 
登录到数据库mysql服务器,用mysql客户端连接mysql数据库,执行命令 mysql > show processlist; 没发现什么异常,负载也很低。看来从这里看不出什么名堂。接下来当然该看mysql错误日志,发现如下异常:
080313 11:25:35  InnoDB: Error: cannot allocate 1064960 bytes of
InnoDB: memory with malloc! Total allocated memory
InnoDB: by InnoDB 1233305429 bytes. Operating system errno: 12
InnoDB: Check if you should increase the swap file or
InnoDB: ulimits of your operating system.
InnoDB: On FreeBSD check you have compiled the OS with
InnoDB: a big enough maximum process size.
InnoDB: Note that in most 32-bit computers the process
InnoDB: memory space is limited to 2 GB or 4 GB.
InnoDB: We keep retrying the allocation for 60 seconds...
080313 11:26:08 [ERROR] /usr/local/mysql/bin/mysqld: Sort aborted
080313 11:26:19  InnoDB: Error: cannot allocate 1064960 bytes of
InnoDB: memory with malloc! Total allocated memory
这个报错的大意是:内存基本耗尽,没有再可以分配的空间。由此判断是什么东西产生巨大的负荷导致系统内存被榨干了。不过现在数据库服务器已经趋于平稳,暂时查不到什么原因引起这个故障。
 
基本情况掌握了,停下来休息片刻,于是顺手收一下邮件,乖乖,来了一封报警邮件,赶紧打开,其内容如下:
***** Nagios 2.9 *****
 
Notification Type: PROBLEM
 
Service: check_load
Host: tomcat nch100
Address: 61.154.105.100
State: WARNING
 
Date/Time: Thu Mar 13 10:59:53 CST 2008
 
Additional Info:
 
WARNING - load average: 3.94, 8.56, 9.17
报警消息表明主机61.154.105.10010:59的这个时间负载过大。而这个主机正好是tomcat服务器,看来问题就在这个上面.为了近一步确认自己的想法,我来查看一下网络流量:
  
从流量图可以看出,产生异常流量的时间正好与报警信息的时间一致,再给同事打电话,问:“你们都在61.154.105.100 这个机器上干了啥?”,答:“执行了一条不正确的sql语句,发现问题后取消这个sql语句”。至此,原因查明!
 
                                             2008-3-17
 
                                            海淀福源门悟真阁

本文出自 “sery” 博客,请务必保留此出处http://sery.blog.51cto.com/10037/66961





    文章评论
 
2008-03-20 18:36:24
先抢沙发

2008-03-20 18:37:58
再抢板凳
原来标题是这个呀,呵呵

2008-03-20 18:39:19
是 专家这个词现在已经是贬意了

2008-03-20 19:21:08
发现自己要补充一下应用方面的知识了。呵呵。出去爱好

2008-03-20 19:53:07
虽然已经听秋香描述过这个故障了,不过从这篇文章还是学会不少东西.

2008-03-20 20:14:52
看不懂哦,但是要顶!!

2008-03-20 20:31:05
排错过程一目了然

学习了~~

2008-03-20 20:57:33
谢谢各位捧场

2008-03-20 21:53:51
精彩,学习

2008-03-21 08:20:22
秋香之专业精神真令偶敬佩
学习ING~~~~~~~~~~

2008-03-21 09:58:35
强烈要求秋香写一本。关于LIUNX的书出来。。。。

2008-03-22 23:36:38
请教秋香老师
apache就把请求转交给tomcat服务器,tomcat再从数据库获取数据或向数据库插入记录。这是典型的3层应用逻辑。
tomcat是怎样调用mysql里的数据的呢?是不是还要做具体的配置
就像weblogic调用oracle里的数据一样,要设置数据源等等.......

2008-03-24 10:45:01
有好几种连接数据库的方式,依自己的习惯而定

2008-05-07 13:00:22
    山猫坏人
2008-03-21 09:58:35
强烈要求秋香写一本。关于LIUNX的书出来。。。。

秋香的文档写得好,大家都有这个想法

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: