MySQL故障可分为启动失败、连接异常、性能瓶颈、数据错误等常见类型,以下是针对性的排查步骤:
检查MySQL服务状态
使用systemctl命令确认MySQL是否正在运行:
sudo systemctl status mysqld
若服务未启动,尝试启动并查看反馈:
sudo systemctl start mysqld
sudo systemctl status mysqld # 确认启动是否成功
若启动失败,需进入下一步排查。
查看错误日志
MySQL的错误日志是定位问题的核心依据,通常位于/var/log/mysqld.log(部分系统可能为/var/log/mysql/error.log)。使用以下命令查看实时日志:
sudo tail -f /var/log/mysqld.log
日志中会明确提示启动失败的具体原因(如配置文件错误、数据目录权限问题、端口冲突等)。
检查配置文件语法
MySQL的主配置文件通常为/etc/my.cnf或/etc/mysql/my.cnf。使用以下命令检查语法是否正确:
sudo mysqld --validate-config
重点检查以下关键配置项:
datadir:数据目录路径是否存在且可访问;socket:套接字文件路径是否正确;port:端口是否被其他进程占用(默认3306);innodb_buffer_pool_size:InnoDB缓冲池大小是否合理(建议为物理内存的50%-75%)。检查端口冲突
使用netstat或ss命令检查MySQL默认端口(3306)是否被占用:
sudo netstat -tuln | grep 3306
若端口被占用,可通过以下方式解决:
sudo kill -9 <PID>);port参数,更换为其他未被使用的端口(如3307)。验证文件系统与权限
df -h检查磁盘空间是否充足(建议剩余空间大于10%);sudo setenforce 0),若问题解决,需调整SELinux策略(sudo chcon -R -t mysqld_db_t /var/lib/mysql);mysql)对数据目录有读写权限:sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod -R 755 /var/lib/mysql
连接失败问题
若能启动MySQL但仍无法连接,需检查以下内容:
firewalld,需开放MySQL端口:sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
localhost连接):SELECT host, user FROM mysql.user; -- 查看用户权限
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password'; -- 授权远程连接
FLUSH PRIVILEGES; -- 刷新权限
数据文件损坏
若出现“Table corruption”或“无法读取表”错误,可使用mysqlcheck工具修复:
sudo mysqlcheck --all-databases --auto-repair --optimize
该命令会自动检查并修复所有数据库中的损坏表。
性能瓶颈问题
若MySQL运行缓慢,需通过以下步骤优化:
slow_query_log = 1,slow_query_log_file = /var/log/mysql/slow.log,long_query_time = 2),使用pt-query-digest分析慢查询;EXPLAIN分析查询计划,添加合适的索引(避免全表扫描);innodb_buffer_pool_size(InnoDB缓冲池)、max_connections(最大连接数)等参数;OPTIMIZE TABLE整理表碎片,ANALYZE TABLE更新表统计信息。若以上步骤均无法解决问题,可尝试重新安装MySQL(需提前备份数据):
sudo yum remove mysql-community-server # 卸载MySQL
sudo rm -rf /var/lib/mysql # 删除数据目录
sudo yum install mysql-community-server # 重新安装
sudo systemctl start mysqld # 启动服务
重新安装后,需恢复备份的数据并重新配置。
通过以上步骤,可覆盖CentOS下MySQL的常见故障场景。排查时需结合错误日志和具体错误信息,逐步缩小问题范围,最终定位并解决问题。