今天用LNMP一键安装包(lnmp.org)用命令“lnmp mysql start"或“/etc/init.d/mysql”启动mysql的时候启动不了,报了如下错误:
Starting MySQL. ERROR! The server quit without updating PID file (/usr/local/mysql/var/iZbp1fsaxsfwrm9091mcc6Z.pid).
当我查看mysql错误日志的时候(LNMP一键安装包日志路径是:/usr/local/mysql/var/),给我反映了具体如下ERROR错误:
InnoDB: mmap(137363456 bytes) failed; errno 12
2019-06-08 09:08:05 14335 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2019-06-08 09:08:05 14335 [ERROR] Plugin 'InnoDB' init function returned error.
2019-06-08 09:08:05 14335 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2019-06-08 09:08:05 14335 [ERROR] Unknown/unsupported storage engine: InnoDB
2019-06-08 09:08:05 14335 [ERROR] Aborting
中文翻译
InnoDB:mmap(137363456字节)失败; errno 12
2019-06-08 09:08:05 14335 [错误] InnoDB:无法为缓冲池分配内存
2019-06-08 09:08:05 14335 [ERROR]插件'InnoDB'init函数返回错误。
2019-06-08 09:08:05 14335 [ERROR]插件'InnoDB'注册为STORAGE ENGINE失败。
2019-06-08 09:08:05 14335 [错误]未知/不支持的存储引擎:InnoDB
2019-06-08 09:08:05 14335 [ERROR]中止
原因:
经过千辛万苦,最后找到了原因,原因是内存不够用,内存不足造成的。
解决方法
因为由于是内存不够用的问题,也可以说你的服务器配置过低,需要考虑服务器配置升级的问题。
1、查看服务器的免费剩余内存
可以用"free -m"命令来查看自己服务器的内存:
$ free -m
从上图中可以得到,免费的内存只有大概300M的样子;而mysql默认给InnoDB分配的内存就是128M。所以说,内存的确是不足。
注意:有时候服务器免费内存太少,如果你又没有用过什么,不妨重启一下服务器系统。
3、修改mysql配置文件my.cnf,添加如下设置参数:把mysql给InnoDB分配的内存设置为8M;
innodb_buffer_pool_size = 8M
4、现在,我再用命令“lnmp mysql start"或“/etc/init.d/mysql”启动mysql,结果出现了“SUCCESS!”,说明成功了。
注意:如果你此次启动成功了后,等一会儿,mysql又被突然关闭了,你又需要重启,经常反反复复。这说明你服务器的配置真的是太垃圾了,支撑不了你现有的业务了,需要考虑升级,或者做一个CDN,减少数据库的请求压力。