Ubuntu服务器MySQL自动停止无法启动 报ERROR 2002错误
不要盲目试网上零散的解决方案,先查错误日志定位根因,操作步骤按优先级从高到低排列:
第一步:先查错误日志定位具体原因
执行以下任一命令查看最近的错误记录,日志会直接标注启动失败的具体原因:
- 查看systemd记录的服务日志:
sudo journalctl -u mysql.service -b --no-pager - 查看MySQL原生错误日志:
sudo tail -n 50 /var/log/mysql/error.log
高频故障对应解决方法
1. 磁盘空间占满(最常见)
执行df -h查看分区使用率,如果MySQL数据所在分区(一般是根分区/)使用率达到100%,MySQL无法写入sock文件、pid文件和临时数据,会直接启动失败。
先清理磁盘冗余文件(比如旧的系统日志、过期备份、无用安装包),腾出至少5%以上空闲空间后,执行sudo systemctl start mysql尝试启动即可。
2. sock文件目录权限异常
存储sock文件的/var/run/mysqld目录如果丢失、属主不对,会直接触发你看到的2002错误,依次执行以下命令修复:
sudo mkdir -p /var/run/mysqld sudo chown mysql:mysql /var/run/mysqld sudo chmod 755 /var/run/mysqld sudo rm -f /var/run/mysqld/mysqld.pid /var/run/mysqld/mysqld.sock
执行完后重新启动MySQL服务。
3. 配置文件语法错误
如果之前修改过MySQL配置(比如my.cnf、mysqld.cnf),很可能是参数写错、路径配置不对、端口被占用导致启动失败。
先执行sudo mysqld --validate-config检查配置语法,根据输出的报错提示修正对应配置项,再尝试启动服务。如果记不清之前改了什么,可以把最近修改的配置回滚到默认状态再测试。
4. 异常退出导致InnoDB数据损坏
如果故障前出现过服务器异常断电、内存不足OOM杀死MySQL进程的情况,大概率是InnoDB数据文件损坏:
- 先全量备份数据防止误操作丢失:
sudo cp -rp /var/lib/mysql /var/lib/mysql_bak_$(date +%Y%m%d) - 编辑MySQL配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]段落下添加innodb_force_recovery = 1 - 保存退出后尝试启动MySQL,如果启动失败就把数值依次调整为2/3/4/5/6(最高不要超过6),直到能正常启动
- 注意:该恢复模式下仅支持导出数据,禁止写入业务数据,导出全量数据后,注释掉
innodb_force_recovery配置项,删除/var/lib/mysql下的ib_logfile*文件,重启MySQL后重新导入备份数据即可。
5. 服务重启触发频率限制
你贴的服务状态里有Start request repeated too quickly提示,是因为之前连续启动失败触发了systemd的重启限制,修复完上面的问题后,执行sudo systemctl reset-failed mysql重置失败计数,再启动服务即可。
内容的提问来源于stack exchange,提问作者loliki

