mysql数据库故障排查方案
MySQL数据库故障排查方法总结
一、基础检查
-
服务状态检查
systemctl status mysqld # 检查MySQL服务状态 systemctl start mysqld # 启动服务 systemctl restart mysqld # 重启服务
-
错误日志检查
- 默认位置:
/var/log/mysqld.log
或/var/log/mysql/mysql.err
- 查看最后100行日志:
tail -n 100 /var/log/mysqld.log
- 默认位置:
-
端口监听检查
netstat -tulnp | grep mysql ss -tulnp | grep mysql
二、连接问题排查
-
连接数检查
SHOW STATUS LIKE 'Threads_connected'; SHOW VARIABLES LIKE 'max_connections';
-
连接拒绝常见原因
- 用户名/密码错误
- 主机没有访问权限
- 防火墙/安全组限制
- 达到最大连接数
-
权限检查
SELECT host, user FROM mysql.user; SHOW GRANTS FOR 'username'@'host';
三、性能问题排查
-
慢查询分析
SHOW VARIABLES LIKE 'slow_query_log%'; SHOW VARIABLES LIKE 'long_query_time';
-
当前运行查询
SHOW PROCESSLIST;
-
性能指标检查
SHOW GLOBAL STATUS; SHOW ENGINE INNODB STATUS;
-
锁等待分析
SELECT * FROM information_schema.INNODB_TRX; SELECT * FROM information_schema.INNODB_LOCKS; SELECT * FROM information_schema.INNODB_LOCK_WAITS;
四、存储引擎问题
-
表损坏修复
CHECK TABLE table_name; REPAIR TABLE table_name;
-
InnoDB恢复
- 检查innodb_force_recovery参数
- 使用
innodb_file_per_table
单独恢复表
五、复制问题排查
-
主从状态检查
SHOW MASTER STATUS; SHOW SLAVE STATUS\G
-
常见复制错误
- 主从数据不一致
- 网络中断
- 二进制日志损坏
- SQL线程错误
六、备份恢复问题
-
备份验证
mysql -uroot -p -e "SHOW DATABASES;" < backup.sql
-
恢复失败常见原因
- 备份文件损坏
- 磁盘空间不足
- 权限问题
七、资源问题排查
-
磁盘空间检查
df -h du -sh /var/lib/mysql/
-
内存使用检查
free -m top -p `pgrep mysqld`
八、高级工具
-
性能分析工具
- pt-query-digest
- mysqldumpslow
- Performance Schema
-
监控工具
- Prometheus + Grafana
- MySQL Enterprise Monitor
- Percona Monitoring and Management
九、常见故障处理流程
- 检查错误日志获取具体错误信息
- 确认MySQL服务是否正常运行
- 检查资源使用情况(CPU、内存、磁盘)
- 分析当前数据库负载和查询
- 检查复制状态(如果配置了复制)
- 考虑回滚到最近备份(严重情况下)
通过系统化的排查方法,可以快速定位和解决大多数MySQL数据库故障问题。