技术饭

MySQL的InnoDB引擎数据库经常出现自动关闭现象,Cannot allocate memory for the buffer pool

copylian    0 评论    9424 浏览    2019.10.16

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

资料参考:

https://stackoverflow.com/questions/25965638/mysql-fatal-error-cannot-allocate-memory-for-the-buffer-pool

https://www.loyous.com/index.php/mysql/36.html

只袄早~~~
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!

文明上网理性发言!

  • 还没有评论,沙发等你来抢