InnoDB: Cannot allocate memory for the buffer pool

/ Markbug / 没有评论 / 459浏览
InnoDB: Cannot allocate memory for the buffer pool

今天准备更新博客,当登陆时发现一直登陆不成功,后来查看日志显示后台服务挂了,也就是mysql连接不上了。于是准备重启数据库试试,但发现这时mysql已经启动不了了,一直报下面的错误。

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

我们知道报上述错误的问题有很多种,我们无法通过上述错误定位问题,如果定位不到问题,那么解决起来是很困难的。所以我们这时就要查看mysql的日志文件了。下面是启动mysql数据库时的日志信息。

2017-05-14 15:43:38 16941 [Note] Plugin 'FEDERATED' is disabled.

2017-05-14 15:43:38 16941 [Note] InnoDB: Using atomics to ref count buffer pool pages

2017-05-14 15:43:38 16941 [Note] InnoDB: The InnoDB memory heap is disabled

2017-05-14 15:43:38 16941 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins

2017-05-14 15:43:38 16941 [Note] InnoDB: Memory barrier is not used

2017-05-14 15:43:38 16941 [Note] InnoDB: Compressed tables use zlib 1.2.3

2017-05-14 15:43:38 16941 [Note] InnoDB: Using Linux native AIO

2017-05-14 15:43:38 16941 [Note] InnoDB: Using CPU crc32 instructions

2017-05-14 15:43:38 16941 [Note] InnoDB: Initializing buffer pool, size = 200.0M

InnoDB: mmap(214630400 bytes) failed; errno 12

2017-05-14 15:43:38 16941 [ERROR] InnoDB: Cannot allocate memory for the buffer pool

2017-05-14 15:43:38 16941 [ERROR] Plugin 'InnoDB' init function returned error.

2017-05-14 15:43:38 16941 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

2017-05-14 15:43:38 16941 [ERROR] Unknown/unsupported storage engine: InnoDB

2017-05-14 15:43:38 16941 [ERROR] Aborting

我们发现上述日志显示mysql启动出错了,具体的原因就是下面的这句日志信息。

Cannot allocate memory for the buffer pool

也就是不能为缓冲池分配内存了。看到这里我们第一个想到的就应该是服务器的内存不够了,于是通过linux free命令查看系统的内存使用,显示确实是内存不够使用了。于是为了保证以后服务不会出现此问题,本人设置了Swap空间。Swap也就相当于Windows的虚拟内存,也就是当系统内存不够使用时,可以将要处理的数据放到这个空间内处理。Linux系统默认Swap空间为0。本人于是将Swap设置为50M。然后重启mysql,问题解决了。