centos mysql如何故障排查
导读:CentOS 上 MySQL 故障排查清单 一 快速定位流程 确认服务状态:执行systemctl status mysqld,若未运行则systemctl start mysqld;必要时查看journalctl -xe获取更详细上下文...
CentOS 上 MySQL 故障排查清单
一 快速定位流程
- 确认服务状态:执行systemctl status mysqld,若未运行则systemctl start mysqld;必要时查看journalctl -xe获取更详细上下文。
- 查看错误日志:优先检查**/var/log/mysqld.log**,定位启动或运行期的报错关键词(如权限、配置、端口、磁盘等)。
- 校验配置文件:核对**/etc/my.cnf或/etc/mysql/my.cnf的语法与关键项(如datadir、port、socket、bind-address**)。
- 端口与进程:用ss -tlnp | grep 3306或netstat -tlnp | grep 3306确认端口监听与占用情况。
- 资源与磁盘:用top/htop、free -m、df -h排查CPU、内存、磁盘空间是否不足。
- 远程连通性:在客户端执行ping与telnet your_mysql_ip 3306验证网络与端口可达。
- 权限与账户:登录 MySQL 检查用户host字段(如**'%'是否允许远程),必要时调整授权并FLUSH PRIVILEGES**。
二 常见故障与修复对照表
| 症状 | 快速检查 | 修复建议 |
|---|---|---|
| 服务无法启动 | systemctl status mysqld;/var/log/mysqld.log 报错 | 依据日志修复配置/权限/目录;必要时用 mysqld_safe 启动观察 |
| 端口未监听或被占用 | ss -tlnp | grep 3306;netstat -tlnp |
| 本地能连,远程连不上 | bind-address;firewalld;用户 host | my.cnf 设置bind-address=0.0.0.0;firewall-cmd 放行3306/tcp;创建**‘user’@‘%’**并授权 |
| 权限被拒绝 | SELECT user,host FROM mysql.user; | 创建或调整用户 host 为**'%'或指定网段;执行GRANT … TO … IDENTIFIED BY …; FLUSH PRIVILEGES; ** |
| 配置文件错误 | my.cnf 语法/路径错误 | 逐项校验 datadir、socket、port;修正后重启 |
| 数据目录权限错误 | ls -ld /var/lib/mysql | 执行chown -R mysql:mysql /var/lib/mysql;再启动 |
| 磁盘空间不足 | df -h | 清理无用文件/归档日志;扩容后再启动 |
| 连接参数错误 | 主机、端口、库名、密码 | 校正连接串与端口(默认3306)并重试 |
三 关键命令速查
- 服务与日志
- 查看状态:systemctl status mysqld
- 启动/重启:systemctl start|restart mysqld
- 查看日志:tail -n 200 /var/log/mysqld.log
- 端口与进程
- 监听端口:ss -tlnp | grep 3306 或 netstat -tlnp | grep 3306
- 防火墙(firewalld)
- 放行端口:firewall-cmd --permanent --add-port=3306/tcp
- 放行服务:firewall-cmd --permanent --add-service=mysql
- 重载规则:firewall-cmd --reload
- MySQL 内部诊断
- 当前连接与慢查询:SHOW FULL PROCESSLIST;
- 慢查询分析:启用慢日志(如slow_query_log=1、slow_query_log_file=/var/log/mysql/slow.log、long_query_time=2),用pt-query-digest分析
- 索引体检:pt-duplicate-key-checker 检查冗余/冲突索引
- SELinux(如启用)
- 查看状态:getenforce
- 故障定位可临时:setenforce 0(仅测试用途,用后恢复)
四 远程访问配置要点
- 修改绑定地址:在**/etc/my.cnf的[mysqld]下设置bind-address=0.0.0.0**(或注释掉该行以监听所有地址),重启mysqld。
- 防火墙放行:使用firewall-cmd放行3306/tcp或mysql服务,并reload。
- 账户权限:确保存在允许远程的主机,例如创建**‘remote’@'%'并授权,或调整现有用户的host字段;执行FLUSH PRIVILEGES; **。
- 云环境安全组:如部署在云服务器,需在安全组放行3306/TCP入方向规则。
五 性能与可用性检查
- 资源瓶颈:用top/htop、free -m、iostat -x 1、df -h排查CPU、内存、IO、磁盘是否成为瓶颈。
- 连接与负载:在 MySQL 内执行SHOW GLOBAL STATUS LIKE ‘Threads_connected’; 、SHOW GLOBAL STATUS LIKE ‘Max_used_connections’; ,结合max_connections评估是否需要调优。
- 慢查询治理:开启并定期分析慢查询日志,用pt-query-digest定位耗时 SQL,配合索引优化与 SQL 改写。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos mysql如何故障排查
本文地址: https://pptw.com/jishu/765229.html
