首先确认MySQL服务是否正在运行,使用以下命令查看服务状态:
sudo systemctl status mysqld
若服务未启动,尝试启动服务:
sudo systemctl start mysqld
若需设置开机自启,执行:
sudo systemctl enable mysqld
MySQL的错误日志是排查故障的核心依据,通常位于/var/log/mysqld.log或/var/log/mysql/error.log。使用以下命令查看最新日志:
sudo tail -n 50 /var/log/mysqld.log
通过日志中的错误信息(如“无法访问数据目录”“配置文件语法错误”“端口冲突”等),可快速定位问题根源。
MySQL的主配置文件通常为/etc/my.cnf或/etc/mysql/my.cnf,需检查以下内容:
datadir(数据目录路径)、socket(套接字文件路径)、port(监听端口,默认3306);mysqld --help --verbose命令检查配置文件是否有语法错误。MySQL默认使用3306端口,若该端口被其他进程占用,会导致服务无法启动。使用以下命令检查端口占用情况:
sudo netstat -tulnp | grep 3306
若端口被占用,可选择:
kill -9 <PID>);port参数,更换为其他空闲端口(如3307)。MySQL需要对其数据目录(通常为/var/lib/mysql)有读写权限。使用以下命令检查并修复权限:
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod -R 755 /var/lib/mysql
权限问题常导致“无法访问数据目录”“数据文件损坏”等错误。
mysql -u root -p
若无法连接,需检查MySQL用户权限(见下一步)。bind-address = 0.0.0.0(允许所有IP连接);sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
登录MySQL后,检查用户权限:
SELECT host, user FROM mysql.user;
若用户仅能从localhost连接(如root@localhost),需添加远程连接权限:
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
若数据库响应缓慢,需启用慢查询日志定位耗时SQL:
my.cnf中添加:slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1 # 超过1秒的SQL视为慢查询
pt-query-digest工具(需安装Percona Toolkit)生成报告:pt-query-digest /var/log/mysql/slow.log
报告中会显示最耗时的SQL、执行频率、扫描行数等信息,结合EXPLAIN命令分析SQL执行计划(关注type、key、rows字段),优化索引或SQL语句。若表损坏导致查询失败,可使用mysqlcheck工具修复:
mysqlcheck -u root -p --all-databases --auto-repair
该命令会检查所有数据库中的表,并尝试自动修复损坏的表。
若以上方法均无法解决,可尝试卸载并重新安装MySQL:
/var/lib/mysql目录;sudo yum remove mysql mysql-server;sudo yum install mysql-server;通过以上步骤,可覆盖CentOS下MySQL的常见故障场景(服务无法启动、连接失败、慢查询、表损坏等),逐步定位并解决问题。若问题仍存在,建议结合错误日志中的具体信息进一步分析。