centos中mysql故障排查指南
导读:CentOS 上 MySQL 故障排查指南 一 快速定位流程 检查服务状态与启动失败原因 执行:sudo systemctl status mysqld、sudo journalctl -xe | tail -n 100 若失败,优先查...
CentOS 上 MySQL 故障排查指南
一 快速定位流程
- 检查服务状态与启动失败原因
- 执行:
sudo systemctl status mysqld、sudo journalctl -xe | tail -n 100 - 若失败,优先查看错误日志:
sudo tail -n 100 /var/log/mysqld.log
- 执行:
- 确认监听与端口
- 执行:
sudo ss -tlnp | grep 3306(或netstat -tlnp | grep 3306) - 若端口被占用:
sudo kill -9 < PID>或调整 MySQL 端口
- 执行:
- 配置文件与权限
- 主配置:
/etc/my.cnf或/etc/mysql/my.cnf,核对datadir、socket、log-error、port - 数据目录权限:
ls -ld /var/lib/mysql,应为 mysql:mysql
- 主配置:
- 资源与系统限制
- 资源:
free -m、df -h、top/htop - 句柄与内核参数:
ulimit -n、/etc/security/limits.conf、/etc/sysctl.conf
- 资源:
- 远程连接快速验证
- 本机:
mysql -u root -p -h 127.0.0.1 - 远程:
mysql -u user -p -h < 服务器IP> -P 3306 - 网络:
ping < IP>、telnet < IP> 3306或nc -vz < IP> 3306
- 本机:
二 常见故障与处理清单
| 症状 | 关键检查 | 处理要点 |
|---|---|---|
| 服务无法启动/启动即停 | systemctl status mysqld、/var/log/mysqld.log |
修正配置语法、修复目录权限为 mysql:mysql、排查磁盘空间与内存、必要时 systemctl reset-failed 后重启 |
| Starting MySQL… PID file 未更新 | 错误日志、进程残留 | 确认无残留 mysqld 进程(`ps -ef |
| ERROR 2002 Can’t connect through socket | socket 路径、/var/lib/mysql 权限 |
确认 socket 配置与客户端一致、修复目录权限、确保服务已启动 |
| 远程连不上 | bind-address、firewalld、mysql.user 授权 |
配置 bind-address=0.0.0.0、放行 firewall-cmd --permanent --add-port=3306/tcp &
&
firewall-cmd --reload、创建 'user'@'%' 或 'user'@'网段' 并 FLUSH PRIVILEGES;
|
| ERROR 1045 Access denied | 用户名/密码/来源主机 | 校对密码、检查 SELECT host,user FROM mysql.user;
、为来源主机授权并刷新权限 |
| Host ‘x.x.x.x’ is not allowed | 用户 host 字段 | 新建或调整用户 host 为客户端 IP 或 %(生产建议白名单网段) |
| 表损坏/异常 | mysqlcheck、mysql_upgrade |
执行 mysqlcheck --repair --all-databases;如遇系统表不一致,执行 mysql_upgrade -u root -p |
| CPU 飙高 | SHOW FULL PROCESSLIST;
、EXPLAIN |
定位慢 SQL、补充索引、改写 SQL、必要时限流或优化参数 |
| SELinux 拦截 | getenforce、/var/log/audit/audit.log |
临时 setenforce 0 验证;生产环境使用 semanage/布尔值精细化放行,避免直接关闭 SELinux |
| 插件/库缺失(如 auth_socket) | 错误日志 | 安装缺失插件或改用密码认证,必要时重新初始化数据目录 |
| 以上条目覆盖了启动、连接、权限、系统与安全、性能等高频问题及处置路径。 |
三 日志与诊断命令速查
- 错误日志:
sudo tail -f /var/log/mysqld.log(启动失败、InnoDB 异常、权限问题首选) - 慢查询与性能
- 动态开启:
SET GLOBAL slow_query_log=1; SET GLOBAL long_query_time=1; - 位置:
SHOW VARIABLES LIKE 'slow_query_log_file'; - 分析:
pt-query-digest /var/log/mysql/slow.log
- 动态开启:
- 运行态与锁
- 会话与杀会话:
SHOW FULL PROCESSLIST;、KILL < ID> ; - InnoDB 状态:
SHOW ENGINE INNODB STATUS\G;
- 会话与杀会话:
- 权限核验:
SHOW GRANTS FOR 'app'@'10.0.%'; - 表与库健康:
mysqlcheck --repair --all-databases - 连接测试(客户端):
mysql -u user -p -h < IP> -P 3306,或telnet/nc测端口连通性
四 配置与加固要点
- 远程访问
- 配置:
/etc/my.cnf中[mysqld] bind-address=0.0.0.0 - 防火墙:
firewall-cmd --permanent --add-port=3306/tcp & & firewall-cmd --reload - 授权:优先
'app'@'10.0.%'这类白名单网段,避免滥用'%'
- 配置:
- 安全初始化
- 执行:
mysql_secure_installation(禁用匿名、禁止 root 远程、移除 test 库、设置复杂度)
- 执行:
- 字符集统一
- 配置:
[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci - 会话:
SET NAMES utf8mb4;
- 配置:
- 基础性能基线(按内存调优)
innodb_buffer_pool_size设为内存的约 50%–80%innodb_log_file_size设为 128M–512Mmax_connections结合并发与内存评估- 建议配合
MySQLTuner/Percona Toolkit持续巡检
五 应急与回滚建议
- 变更前备份:
mysqldump -u root -p --single-transaction --routines --triggers --databases < 库名> > backup.sql - 配置回滚:保留
/etc/my.cnf.bak,异常时cp /etc/my.cnf.bak /etc/my.cnf & & systemctl restart mysqld - 数据目录回滚:备份异常
datadir,从备份恢复或采用mysql_install_db/mysqld --initialize重建系统表后再导入业务数据 - 切勿盲目删除
ibdata1、mysql系统库或执行reset master等破坏性操作,先定位日志与根因
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos中mysql故障排查指南
本文地址: https://pptw.com/jishu/785796.html
