技术饭
MySQL的InnoDB引擎数据库经常出现自动关闭现象,Cannot allocate memory for the buffer pool
MySQL的InnoDB引擎数据库经常出现自动关闭现象,Cannot allocate memory for the buffer pool,最近网站经常时不时地出现访问不了的状况,一直没在意,今天又一down机了,索性就查看了下MySQL的日志。
日志信息:
2019-10-16T05:14:54.243592Z 0 [ERROR] [MY-012681] [InnoDB] mmap(137363456 bytes) failed; errno 12
2019-10-16T05:14:54.243660Z 1 [ERROR] [MY-012956] [InnoDB] Cannot allocate memory for the buffer pool
2019-10-16T05:14:54.243691Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
2019-10-16T05:14:54.243751Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2019-10-16T05:14:54.243974Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2019-10-16T05:14:54.245444Z 0 [ERROR] [MY-010119] [Server] Aborting
初步判断是:无法为缓冲池分配内存,也就是内存不足
Innodb 存储引擎的缓存机制和 MyISAM 的最大区别就在于 Innodb 不仅仅缓存索引,同时还会缓存实际的数据。所以,完全相同的数据库,使用 Innodb 存储引擎可以使用更多的内存来缓存数据库相关的信息,当然前提是要有足够的物理内存。innodb_buffer_pool_size 参数用来设置 Innodb 最主要的 Buffer(Innodb_Buffer_Pool)的大小,也就是缓存用户表及索引数据的最主要缓存空间,对 Innodb 整体性能影响也最大。这个参数设置成内存的50%-80%,当然具体要结合实际情况而定,考虑别的存储引擎占用的内存,考虑服务器是不是还提供其他服务等等…看来,我的机器之所以宕掉的原因是,系统默认的内存:
修改my.cnf配置:
innodb_buffer_pool_size=50M
mysql官方参考资料:
https://dev.mysql.com/doc/refman/5.6/en/memory-use.html
资料参考:
文明上网理性发言!