You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS8小型服务器MariaDB无故停止运行的排查求助

MariaDB 无响应问题排查方案

问题背景

我有一台搭载Apache/MariaDB的小型Web/邮件服务器。上周修改部分WWW代码后,为适配代码调整了php.ini配置:

max_input_vars = 5000(后续降为4000,初始值为1000)

修改后,MariaDB 10.3.28出现异常:完全无法接收请求,重启mysql和httpd后仅能正常运行24小时。日志中频繁出现以下警告(此前仅偶尔出现,现每小时数十次):

2022-10-05 14:28:58 2796199 [Warning] Aborted connection 2796199 to db: 'ACTIVEDB' user: 'USER' host: 'localhost' (Got an error reading communication packets)

已做调整:

  • 降低PHP的max_input_vars值
  • 在my.cnf中添加配置:
max_allowed_packet = 124M
max_connections = 400
log_warnings     = 3

此前配置均为默认值,曾将日志级别设为4,但日志增长过快且未捕获崩溃节点。服务器磁盘为500GB Intel NVMe,无异常。


一、MariaDB无响应时的检查/连接方法

  • 本地直接连接测试:在服务器终端执行mysql -u 用户名 -p,输入密码尝试连接。成功连接则说明服务本身正常,问题可能在网络或应用端;失败则根据报错判断(如Can't connect to local MySQL server through socket表示socket文件异常,Connection refused可能是服务未启动或端口被占用)。
  • 检查服务状态:执行systemctl status mariadb(或service mariadb status,依系统而定),查看服务是否运行,有无启动失败日志。
  • 验证端口监听:用netstat -tulpn | grep mysql或ss -tulpn | grep mysql检查3306端口是否监听。端口未监听则服务未正常启动。
  • TCP方式连接测试:常规连接失败时,尝试mysql -u 用户名 -p -h 127.0.0.1,绕过socket文件排查权限或文件丢失问题。
  • 查看进程状态:执行ps aux | grep mysqld,确认mysqld进程是否存在,是否有CPU、内存占用过高的异常。

二、分步排查方法

  1. 资源占用排查

    • 用top或htop实时监控CPU、内存、磁盘IO使用率。若MariaDB进程占用资源过高,可能是慢查询、连接数耗尽或内存配置不足导致。
    • 执行df -h确认磁盘空间是否充足,iostat检查磁盘IO是否有高读写等待的异常。
  2. 连接与会话分析

    • 连接成功后,执行SHOW GLOBAL STATUS LIKE 'Threads_connected';查看当前连接数,对比max_connections配置,确认是否达到上限。
    • 执行SHOW PROCESSLIST;查看活跃会话,排查是否有长时间运行的查询、锁等待或异常连接。
  3. 日志深度分析

    • 保持log_warnings=3,同时开启慢查询日志:在my.cnf中添加:
      slow_query_log=1
      slow_query_log_file=/var/log/mariadb/slow.log
      long_query_time=2
      
      记录执行时间超2秒的查询,排查低效查询导致的资源耗尽。
    • 查看MariaDB错误日志(通常路径/var/log/mariadb/mariadb.log),寻找重启前的异常信息,如内存不足、表损坏、磁盘错误等。
  4. 配置参数验证

    • 检查max_allowed_packet:若应用有大字段(BLOB/TEXT)写入,可临时调整为256M测试,观察问题是否复现。
    • 核对PHP交互配置:确保mysql.connect_timeout、default_socket_timeout等参数设置合理,避免超时导致连接中断。
    • 调整内存相关配置:根据服务器总内存优化innodb_buffer_pool_size、key_buffer_size,比如8G内存服务器可将innodb_buffer_pool_size设为4G-5G。
  5. 应用代码排查

    • 回顾修改的WWW代码,检查是否存在大量并发请求、循环查询、未释放数据库连接的情况。
    • 模拟高并发场景,测试单请求的数据库交互,观察是否触发连接中断或服务无响应。
  6. 系统与硬件检查

    • 查看系统日志/var/log/messages或/var/log/syslog,排查是否有OOM killer杀死mysqld、磁盘控制器错误等系统级问题。
    • 用smartctl -a /dev/nvme0n1检查NVMe磁盘健康状态,确认无坏块或硬件故障。
  7. 版本与补丁验证

    • 查看MariaDB 10.3.28的已知bug,确认是否存在导致连接中断或崩溃的问题,考虑升级至同分支最新稳定版(如10.3.38)修复已知漏洞。

内容的提问来源于stack exchange,提问作者Gokihar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:30:29