Mysql Server挂掉了,重启总是失败,异常提示:

Starting MySQL.The server quit without updating PID file (/[FAILED]l/mysql/data/VM_1232.pid).

查看日志文件后发现有这么一段[ERROR]。

[ERROR]InnoDB: Cannot allocate memory for the buffer pool.

先不说这段ERROR,这段error只是说明了为什么mysql server 挂掉了。(应该是内存分配问题导致最终内存溢出了)。这个解决办法网上有几种,其中一种是设置buff size:

innodb_buffer_pool_size =128M  
key_buffer_size =120M   

回到重启失败的现象:

进入/mysql/data/查找这个VM_1232.pid文件,发现不存在。同时在这里查找原先的mysql.socket发现也没了。

通过ps -ef | grep "mysql" 发现根本不存在也没有mysql进程。

查看当前内存空间 free 发现也有足够内存。

查看内存监控,过去的1天中确实有内存达顶溢出的现象。

根据以往经验,重启机器,重启mysql server, 成功。

总结一下:

因内存溢出而导致的mysql server异常shutdown的情况下,似乎不能很好的recover后重启mysql server。目前我只发现重启机器能解决问题,重启后pid文件和mysql.socket文件又能重现创建了。如果有网友有更好的解决方法,不胜赐教。

关于如何设置innodb_buffer_pool_size的大小可以参考:mysql参数之innodb_buffer_pool_size大小设置

发表评论