MySQL故障排查在Debian中怎么进行
导读:Debian 上 MySQL 故障排查实操流程 一 快速定位与基础检查 确认服务状态与启动项:使用命令查看状态 sudo systemctl status mysql,若未运行则 sudo systemctl start mysql;必要...
Debian 上 MySQL 故障排查实操流程
一 快速定位与基础检查
- 确认服务状态与启动项:使用命令查看状态 sudo systemctl status mysql,若未运行则 sudo systemctl start mysql;必要时设置开机自启 sudo systemctl enable mysql。
- 查看 MySQL 错误日志:默认路径 /var/log/mysql/error.log,实时跟踪可用 tail -f /var/log/mysql/error.log;也可在 MySQL 内执行 SHOW VARIABLES LIKE ‘log_error’; 确认日志文件路径。
- 核对配置文件:主配置通常为 /etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf,重点检查 datadir、socket、port、bind-address、innodb_buffer_pool_size 等关键项。
- 检查系统资源:用 top/htop 观察 CPU/内存,使用 free -m 查看内存余量,确认是否存在资源瓶颈。
- 检查磁盘空间:执行 df -h,避免因磁盘满导致写入失败或异常退出。
- 查看系统级日志:使用 journalctl -u mysql 或 tail -f /var/log/syslog 获取服务启动、崩溃、被系统干预等线索。
二 连接与网络排查
- 本机连通性:先本地尝试 mysql -u root -p 登录,排除账户与权限问题。
- 端口监听:确认 3306 端口处于监听,可用 ss -lntp | grep 3306 或 netstat -tulpen | grep 3306。
- 远程连通性:从客户端测试 telnet db_host 3306 或 nc -vz db_host 3306;若不通,排查网络与安全组。
- 防火墙放行:
- 使用 UFW:sudo ufw allow 3306/tcp;
- 使用 firewalld:sudo firewall-cmd --zone=public --add-service=mysql --permanent & & sudo firewall-cmd --reload。
- 权限与认证:若日志出现 “Access denied”,在本地以管理员登录后检查并重置权限,例如:
- ALTER USER ‘user’@‘host’ IDENTIFIED BY ‘new_password’;
- SHOW GRANTS FOR ‘user’@‘host’;
- 绑定地址:若仅本地可连,检查 bind-address 是否被设置为 127.0.0.1。
三 性能与崩溃类问题定位
- 慢查询定位:启用并分析慢查询日志(常见路径 /var/log/mysql/slow.log),可用 mysqladmin --relative --sleep 5 --count 10 status 或 mysqladmin -u root -p slow 辅助查看;结合业务优化 SQL 与索引。
- 资源瓶颈:持续观察 CPU、内存、I/O,确认是否存在高负载或 Swap 滥用;必要时调整 innodb_buffer_pool_size 等参数,避免内存不足。
- 崩溃与 OOM:若 MySQL 异常退出,检查系统日志是否出现 OOM Killer 记录(如 “Out of memory: Kill process …”),这通常意味着内存不足导致内核终止 MySQL。
- InnoDB 恢复:遇到表损坏或异常,可在 [mysqld] 段逐步设置 innodb_force_recovery=1…6 尝试启动后导出数据,再重建实例(仅在无法常规启动时作为应急手段)。
- 表修复:MyISAM 表可用 myisamchk -r /var/lib/mysql/db/table.MYI 修复;修复前建议先停机或锁定表。
四 主从复制与主备一致性排查
- 主库状态:执行 SHOW MASTER STATUS; 查看 File 与 Position。
- 从库状态:执行 SHOW SLAVE STATUS\G,重点检查 Slave_IO_Running 与 Slave_SQL_Running 是否为 Yes,并关注 Last_Error、Seconds_Behind_Master 等关键字段,定位复制中断原因并修复。
五 常用命令速查表
| 目标 | 命令示例 |
|---|---|
| 服务状态与启停 | systemctl status mysql;**systemctl start |
| 错误日志 | tail -f /var/log/mysql/error.log;journalctl -u mysql;SHOW VARIABLES LIKE ‘log_error’; |
| 配置核对 | 编辑 /etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf |
| 资源与磁盘 | top/htop;free -m;df -h |
| 端口与连通 | **ss -lntp |
| 防火墙放行 | ufw: sudo ufw allow 3306/tcp;firewalld: sudo firewall-cmd --zone=public --add-service=mysql --permanent & & sudo firewall-cmd --reload |
| 账户与权限 | mysql -u root -p;ALTER USER ‘u’@‘h’ IDENTIFIED BY ‘p’; ;SHOW GRANTS FOR ‘u’@‘h’; |
| 慢查询 | 分析 /var/log/mysql/slow.log;mysqladmin -u root -p slow |
| 复制状态 | SHOW MASTER STATUS; ;SHOW SLAVE STATUS\G |
| InnoDB 应急恢复 | 配置 innodb_force_recovery=1…6 后启动并导出数据(应急) |
| MyISAM 修复 | myisamchk -r /var/lib/mysql/db/table.MYI |
六 实践建议
- 变更前先备份数据与配置;对生产环境谨慎使用 innodb_force_recovery 与强制修复。
- 将错误日志、慢查询日志接入集中监控与告警,便于提前发现异常。
- 合理设置 innodb_buffer_pool_size(常设为物理内存的50%–70%),并控制日志与临时文件增长,避免磁盘被占满。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MySQL故障排查在Debian中怎么进行
本文地址: https://pptw.com/jishu/748723.html
