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强制模式

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

相关推荐
叶九灵不灵23 分钟前
linux远程桌面:xrdp 安装失败
linux·运维·服务器
小美哥131427 分钟前
yum使用阿里云的镜像源报错 Failed connect to mirrors.aliyuncs.com:80; Connection refused“
linux·运维·服务器·阿里云·云计算
白总Server1 小时前
负载均衡架构解说
大数据·运维·数据库·vue.js·mysql·mongodb·负载均衡
安红豆.1 小时前
Linux基础入门 --12 DAY(SHELL脚本编程基础)
linux·运维·服务器
zybsjn1 小时前
Flask 实现登录状态持久化:让用户 1 天内无需重新登录
linux·网络·python
课堂随想1 小时前
安装Rust
linux·rust·机器人
我爱加班、、1 小时前
自定义验证器函数
linux·前端·javascript·vue.js·elementui·ecmascript
咸芝麻鱼1 小时前
Android Studio中导入了包,但无法识别 WindowSizeClass 和相关函数的问题
android·ide·android studio
山河已无恙1 小时前
Linux 性能优化之CPU 多级缓存
linux·缓存·性能优化
佛系小嘟嘟2 小时前
Android Studio 新版本 Logcat 的使用详解
android·gitee·android studio