温馨提示×

MySQL故障排查在Debian中怎么进行

小樊
39
2025-11-17 04:01:26
栏目: 云计算

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 mysqltail -f /var/log/syslog 获取服务启动、崩溃、被系统干预等线索。

二 连接与网络排查

  • 本机连通性:先本地尝试 mysql -u root -p 登录,排除账户与权限问题。
  • 端口监听:确认 3306 端口处于监听,可用 ss -lntp | grep 3306netstat -tulpen | grep 3306
  • 远程连通性:从客户端测试 telnet db_host 3306nc -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 statusmysqladmin -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; 查看 FilePosition
  • 从库状态:执行 SHOW SLAVE STATUS\G,重点检查 Slave_IO_RunningSlave_SQL_Running 是否为 Yes,并关注 Last_Error、Seconds_Behind_Master 等关键字段,定位复制中断原因并修复。

五 常用命令速查表

目标 命令示例
服务状态与启停 systemctl status mysql;**systemctl start
错误日志 tail -f /var/log/mysql/error.logjournalctl -u mysqlSHOW VARIABLES LIKE ‘log_error’;
配置核对 编辑 /etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf
资源与磁盘 top/htopfree -mdf -h
端口与连通 **ss -lntp
防火墙放行 ufw: sudo ufw allow 3306/tcpfirewalld: sudo firewall-cmd --zone=public --add-service=mysql --permanent && sudo firewall-cmd --reload
账户与权限 mysql -u root -pALTER USER ‘u’@‘h’ IDENTIFIED BY ‘p’;SHOW GRANTS FOR ‘u’@‘h’;
慢查询 分析 /var/log/mysql/slow.logmysqladmin -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%),并控制日志与临时文件增长,避免磁盘被占满。

0