首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

/var/log/pacct 文件佔滿磁盤導致 MySQL 啟動失敗:隱形殺手排查實錄

     編輯:MySQL 綜合教學

/var/log/pacct 文件佔滿磁盤導致 MySQL 啟動失敗:隱形殺手排查實錄

MySQL 無預警罷工,mysql.server 啟動腳本靜默退出,mysqld 進程未拉起。去掉腳本輸出重定向後發現:

File size limit exceeded
nohup: ...

ulimit -a 無文件大小限制,數據目錄文件正常。全盤掃描 find / -size +2G 定位到 /var/log/pacct(2.1GB),系統啟用了 accton 進程記賬未做日志輪轉。

根因分析

  • pacct 記錄所有進程執行統計,持續增長無上限。
  • MySQL 啟動腳本 mysqld_safe 內部可能調用 ulimit 或檢查磁盤空間,遇到單文件超限導致 File size limit exceeded 信號,進程直接終止。
  • 清空 pacct 後 MySQL 秒級恢復正常。

解決步驟

# 1. 確認佔盤大文件
find / -type f -size +1G 2>/dev/null
# /var/log/pacct

# 2. 清空(或備份後清空)
> /var/log/pacct
# 或
truncate -s 0 /var/log/pacct

# 3. 配置 logrotate 輪轉
cat > /etc/logrotate.d/pacct <<'EOF'
/var/log/pacct {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 640 root root
    sharedscripts
    postrotate
        /usr/sbin/accton /var/log/pacct 2>/dev/null || true
    endscript
}
EOF

# 4. 或禁用進程記賬(非審計環境)
accton off
chkconfig psacct off

預防清單

  1. 磁盤監控:df -h + find / -size +1G 納入日常巡檢/告警。
  2. 日志輪轉:所有 /var/log 下服務日志強制 logrotate。
  3. 進程記賬審計:業務不需要時關閉 psacct 服務。
  4. 啟動腳本健壯性:mysqld_safe 應優雅處理磁盤寫入失敗,而非直接 exit 1。

無關業務的系統級日志 pacct 竟能「遠程控制」 MySQL 生死。可觀測體系必須覆蓋「非業務文件佔盤」盲區,才能真正做到故障前置發現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved