我的服务器环境是LNMP一键安装包(lnmp.org),服务器一直是正常的,昨天还好好的,今天早上 起来,结果朋友反映网站访问不了,数据库连接不上,我打开服务器发现根本没有mysql这个进程,mysql无故被关闭了,我再用命令“lnmp mysql start"或“/etc/init.d/mysql”结果报了如下完整错误:
Starting MySQL. ERROR! The server quit without updating PID file (/usr/local/mysql/var/iZbp1fsaxsfwrm9091mcc6Z.pid).
中文翻译
启动MySQL。 错误! 服务器退出而不更新PID文件(/usr/local/mysql/var/iZbp1fsaxsfwrm9091mcc6Z.pid)。
解决方法
最初,根据我的经验,我以为是“iZbp1fsaxsfwrm9091mcc6Z.pid”文件的问题。毕竟以前也遇到过类似的问题。我最初解决经过如下:
1、给755权限
$ chmod /usr/local/mysql/var/
2、看是否有 pid 文件?
$ ls -al /usr/local/mysql/var/
结果不用说,是没有的。
3、没有就创建一个pid 文件
$ cd /usr/local/mysql/var/
$ touch iZbp1fsaxsfwrm9091mcc6Z.pid
4、给pid文件权限755
$ chmod iZbp1fsaxsfwrm9091mcc6Z.pid
5、给pid文件所属用户及所属组为mysql
chown mysql:mysql iZbp1fsaxsfwrm9091mcc6Z.pid
当这些设置成功以后,我再用命令“lnmp mysql start"或“/etc/init.d/mysql”启动mysql,结果还是报了一样的错误。只好开始踏入新的解决问题过程:
既然按照上面操作后,启动mysql还报错,说明方法不对,既然不对,遇到这种问题,最好的解决办法就是查看mysql错误日志,看日志才能找到原因,找到了原因,解决起来就容易多了。由于我是用的LNMP一键安装包,mysql错误日志路径是:
/usr/local/mysql/var/iZbp1fsaxsfwrm9091mcc6Z.err
1、我用vim命令查看mysql错误日志,向下翻到最新的mysql错误日志:
vim /usr/local/mysql/var/iZbp1fsaxsfwrm9091mcc6Z.err
2、得到最新的ERROR mysql错误日志如下:
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
通过前面启动mysql的错误再与mysql错误日志错误相结合,得到了如下结果:这是由于内存不足造成的,默认情况下mysql给InnoDB分配的内存是128M,而我的服务器内存总共才2G,都已经用了近1.6G了。
可以用"free -m"命令来查看自己服务器的内存:
$ free -m
注意:如果你发现你服务器你什么都没有操作过,免费内存却变小了,不妨重启一下服务器系统。
3、修改mysql配置文件my.cnf,添加如下设置参数:把mysql给InnoDB分配的内存设置为8M;
innodb_buffer_pool_size = 8M
4、现在,我再用命令“lnmp mysql start"或“/etc/init.d/mysql”启动mysql,结果出现了“Success”,说明成功了。
总结:
当mysql启动不了,如果根据启动报错解决不了,一定要学会看mysql错误日志。毕竟每个人所遇的情况不一定都是一样的,造成mysql启动不了的原因真的是太多了。
拿我这个例子来说,可以直接视为服务器配置不行,太低了,需要考虑服务器升级,为什么我要这么说呢?因为就算我设置成了“innodb_buffer_pool_size = 8M”,当时能正常,但只要访问的人数多了,mysql又会被关闭。毕竟这是我朋友“图便宜买老牛”买的一台阿里云服务器。
2021年09月03日 14:50:01 沙发
太刁了,就该看日志