站内搜索

MySQL无法启动 The server quit without updating PID file 解决方法

  昨天晚上网站突然无法访问,提示数据库连接出错。奇怪的是同一台服务器上所有的网站都提示这个错误,可想而知应该是 MySQL 的问题了。SSH 连接 VPS之后,尝试重启 MySQL 服务,结果果然发现了问题,MySQL无法正常启动,提示:
Starting MySQL.. ERROR! The server quit without updating PID file

[root@HQW-Aliyun lib]# service mysql start
Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/var/HQW-Aliyun.pid).
[root@HQW-Aliyun lib]# 

没明白具体什么原因,于是去网上搜索。有人针对这个问题总结了7种原因:

1.可能是/usr/local/MySQL/data/mysqld.pid文件没有写的权限
解决方法 :
给予权限,执行:
“chown -R mysql:mysql /usr/local/MySQL/data/”
“chmod -R 755 /usr/local/mysql/data”
然后重新启动mysqld!

2.可能进程里已经存在mysql进程
解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld!

3.可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。
解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。

4.mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。
解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data

5.skip-federated字段问题
解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。

6.错误日志目录不存在
解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限

7.selinux惹的祸,如果是centos系统,默认会开启selinux
解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。

以上情况我都做了检查,结果都不是。后来网上有人提到 MySQL 会产生大量日志导致磁盘被塞满,马上检查了下,果然,我的 /dev/vda1 竟已使用100%!!

[root@HQW-Aliyun lib]# df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/vda1       20641404 19577972     14908 100% /
tmpfs             510056        0    510056   0% /dev/shm
/dev/vdb1       30961664  3470208  25918696  12% /home/wwwroot

发现/usr/local/mysql/var下的大量的mysql-bin.000001、mysql-bin.000002…文件,这是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。这样做主要有以下两个目的: 1、数据恢复 如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。 2、主从服务器之间同步数据 主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。

清空 mysql-bin 日志文件的两种方法

方法一
1. 进入MySQL的命令行界面;
2. 停止二进制日志记录:mysql>SET sql_log_bin=0;
3. 执行清空命令:mysql>RESET MASTER;
4. 重启二进制日志记录:mysql>SET sql_log_bin=1;
5. 查看当前二进制日志状态:mysql>SHOW MASTER STATUS;
方法二
1. 进入MySQL的命令行界面;
2. 停止MySQL服务:service mysqld stop;
3. 使用rm命令删除当前的mysql-bin日志文件:rm -f /var/lib/mysql/mysql-bin.*;
4. 启动MySQL服务:service mysqld start;
5. 查看当前二进制日志状态:mysql>SHOW MASTER STATUS;

需要注意的是,清空mysql-bin会影响到正在进行的数据库同步或者备份还原的过程,因此应该在确保没有任何正在进行的操作时再进行清空操作。此外,清空mysql-bin日志文件会使得在此之前的备份失效,因此一定要谨慎操作。

Copyright © XiakeShu.com 版权所有 | 备案号:浙ICP备11004787号-12