记录MySQL启动失败/宕机-Cannot allocate memory for the buffer pool
场景是服务使用的过程中,发现tomcat都起不起来,查看tomcat日志发现是数据库连接异常。接着就是一顿操作了
- 排查思路:
- 用本地工具尝试连接,看看是不是web环境有问题或者MySQL驱动问题。
结果很显然不会是我的代码和环境问题。用工具连接也显示失败,那就会是MySQL服务本身问题了 - 查看f服务器MySQL服务是否存在/启动
ps -ef|grep mysql
发现也没有启动(前两分钟还能连接,估计是自动宕机了)
3. 尝试直接重启mysql服务
service mysqld start
结果就是大家想的那样,依旧顽强的拒绝重启。那就只能查看mysql启动日志了
4. 查看mysql启动错误日志,一般在安装路径下面的log文件夹下,错误日志如下:
2020-04-22T13:42:31.887235Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
2020-04-22T13:42:31.887269Z 0 [ERROR] InnoDB: mmap(137428992 bytes) failed; errno 12
2020-04-22T13:42:31.887278Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2020-04-22T13:42:31.887284Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2020-04-22T13:42:31.887289Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2020-04-22T13:42:31.887293Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2020-04-22T13:42:31.887297Z 0 [ERROR] Failed to initialize builtin plugins.
2020-04-22T13:42:31.887301Z 0 [ERROR] Aborting
在这个日志中发现个很显眼的ERROR
InnoDB: Cannot allocate memory for the buffer pool
意思就是InnoDB的缓冲池内存不够分配了,所以我们需要去设置他得大小
5. 设置InnoDB缓冲池大小
找到my.cnf文件,我的是在 /etc 下面,一般出现这个问题都是使用的默认设置,所以直接新增就好
[mysqld]
#innodb缓冲池大小
innodb_buffer_pool_size = 50M
- 设置完之后,在重新启动mysql服务。然后就能看到
至此,MySQL有重新开始站岗了。。。