MySQL 無預警罷工,mysql.server 啟動腳本靜默退出,mysqld 進程未拉起。去掉腳本輸出重定向後發現:
File size limit exceeded
nohup: ...
ulimit -a 無文件大小限制,數據目錄文件正常。全盤掃描 find / -size +2G 定位到 /var/log/pacct(2.1GB),系統啟用了 accton 進程記賬未做日志輪轉。
pacct 記錄所有進程執行統計,持續增長無上限。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
df -h + find / -size +1G 納入日常巡檢/告警。/var/log 下服務日志強制 logrotate。psacct 服務。mysqld_safe 應優雅處理磁盤寫入失敗,而非直接 exit 1。無關業務的系統級日志 pacct 竟能「遠程控制」 MySQL 生死。可觀測體系必須覆蓋「非業務文件佔盤」盲區,才能真正做到故障前置發現。