Linux启动mysql报错

甲方公司意外停电,所有服务器重启后,发现部署在Linux上的mysql数据库启动失败.再加上老员工离职,新接手项目,对Linux系统了解不多,解决起来用时较多,特此记录。

1.启动及报错

1.1 启动语句1

启动语句1:service mysqld restart

报错1.Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

1.2启动语句2

启动语句2 service mysql start

报错2.Failed to restart mysqld.service: Unit not found

2.解决方案

2.1解决方案1

解决方案1:检查配置文件 cd /etc/ cat my.cnf

没有发现问题

2.2 解决方案2

解决方案2:备份数据库,重装mysql mysqldump -u 用户名 -p 密码 数据库名 > 备份文件名.sql

报错 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

但是查看已有备份文件

但是查看大小为0

2.3 解决方案3

开始搜到了此篇文章:https://www.cnblogs.com/ruiy/p/17610612.html

遇到的情况很类似,但查看日志,发现报错信息不同;

查看最近日志 sudo tail -n 100 /var/log/mysqld.log

定位到问题:Can't start server: Bind on TCP/IP port: Permission denied

查找资料,发现此错误通常是因为 MySQL 或其他服务尝试绑定到 TCP/IP 端口时缺乏必要的权限

解决办法如下:

遇到 "Can't start server: Bind on TCP/IP port: Permission denied" 错误,通常是因为 MySQL 或其他服务尝试绑定到 TCP/IP 端口时缺乏必要的权限。以下是一些常见的解决方法:

解决方法

  1. 检查端口使用情况 : 使用以下命令检查端口是否已被其他进程占用(例如,MySQL 默认使用 3306 端口): bash sudo netstat -tuln | grep 3306

  2. 使用超级用户权限启动服务 : 如果你不是以 root 用户身份运行 MySQL,可以尝试使用 sudo 启动服务: bash sudo systemctl start mysql 或者: bash sudo service mysql start

  3. 检查 MySQL 配置文件 : 确保 MySQL 的配置文件(通常是 /etc/my.cnf/etc/mysql/my.cnf)中指定的端口和绑定地址是正确的。例如: ini [mysqld] bind-address = 127.0.0.1 port = 3306

  4. 检查 SELinux 设置 : 如果你的系统启用了 SELinux,可能会阻止 MySQL 绑定端口。可以暂时禁用 SELinux 来检查是否是这个原因: bash sudo setenforce 0

    如果这样解决了问题,建议调整 SELinux 策略,而不是永久禁用。

  5. 检查防火墙设置 : 确保防火墙没有阻止 MySQL 的端口(默认是 3306),你可以使用以下命令来检查防火墙规则: bash sudo iptables -L 或者,如果使用 firewalldbash sudo firewall-cmd --list-all

  6. 更改 MySQL 数据目录权限 : 如果 MySQL 需要访问特定目录(如数据目录),确保该目录的权限和拥有者是正确的: bash sudo chown -R mysql:mysql /var/lib/mysql

重启 MySQL 服务 在进行上述修改后,不要忘记重启 MySQL 服务以应用更改: bash sudo systemctl restart mysql 或: bash sudo service mysql restart

如果问题仍然存在,请查看 MySQL 的错误日志(通常位于 /var/log/mysql/error.log
/var/lib/mysql/hostname.err),以获取更多信息。

3.问题解决

在检查到第5条时

执行 sudo setenforce 0

问题解决!

使用 sudo cat /var/log/audit/audit.log | grep denied查看拒绝日志,果然看到将数据库端口限制了

在了解SELinux后,明白了必要性

‌SELinux共有三种模式‌:

  • ‌‌Disabled模式‌:SELinux被关闭,不执行任何安全策略。
  • ‌‌Permissive模式‌:SELinux被启用,但不强制执行安全策略。违反策略的操作会被记录,但不会被阻止。
  • ‌‌Enforcing模式‌:SELinux被启用,并强制执行所有安全策略。违反策略的操作会被拒绝并记录日志。

每种模式的特点和用途

  • ‌Disabled模式‌:适用于开发和测试阶段,可以避免SELinux的干扰,方便进行系统调试和开发。
  • ‌Permissive模式‌:适用于测试阶段,可以帮助管理员发现违反策略的操作,而不会中断系统的正常运行。
  • ‌Enforcing模式‌:适用于生产环境,确保系统的安全性,对违反策略的操作进行严格的控制和记录。

临时修改,使用setenforce 命令。一般调试的时候用的多

  • setenforce 0 //设置为Permissive宽容模式
  • setenforce 1 //设置为Enforcing强制模式

这里,暂时采用了临时修改的方式,启动前修改为宽容模式,启动成功后,修改为强制模式

相关推荐
口嗨农民工22 分钟前
linux 时间相关的命令
linux·运维·服务器
往事随风去41 分钟前
面试官:mysql从数据库断开一段时间后,部分binlog已丢失,如何重建主从?
运维·数据库·mysql
evo-master1 小时前
网络编程-HTTP
linux·网络
轻松Ai享生活1 小时前
一文搞懂应用程序 core dump 和内核 core dump
linux
雮尘2 小时前
Android性能优化之枚举替代
android
云飞云共享云桌面2 小时前
1台电脑10个画图设计用怎么实现
linux·运维·服务器·网络·数据库·自动化·电脑
小MarkK2 小时前
[Ubuntu][mount]ubuntu电脑挂载新硬盘
linux·ubuntu·电脑·mount·硬盘挂载
艾莉丝努力练剑2 小时前
【Linux】初始Linux:从计算机历史发展、操作系统历史脉络的角度详谈Linux相关的话题,附Linux安装和用户创建(环境准备)详解
linux·运维·服务器·经验分享
l1t2 小时前
how to build tbox xml into the demo
xml·linux·c语言·parser·tbox
努力学习的小廉2 小时前
深入了解linux系统—— 线程池
linux·运维·服务器