MySQL 無故啟動失敗,mysqld_safe 輸出 File size limit exceeded,數據目錄檔案正常、ulimit 無限制。經 find / -size +2G 定位到 /var/log/pacct (2GB+)——系統審計日誌未輪轉。清空該文件後 MySQL 秒級恢復。本文記錄排查思路、根因分析與預防機制。
$ mysql.server start
Starting MySQL... [FAIL]
# 移除啟動腳本輸出重定向後
$ /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/var/run/mysqld.pid
File size limit exceeded
nohup: ...
ulimit -a:file size (blocks) unlimited,無軟/硬限制find / -size +2048000k -type f 2>/dev/null/var/log/pacct 2.1GBpacct:accton 進程記帳系統生成的二進制審計日誌,記錄每個命令執行的資源使用accton on 但未配置日誌輪轉ulimit -f 設置)mysqld_safe 以 root 啟動,繼承 Shell 的文件大小限制上下文,導致寫入日誌/啟動過程中觸發 EFBIG# 清空 pacct(保留檔案 inode,避免 accton 進程報錯)
> /var/log/pacct
# 或
truncate -s 0 /var/log/pacct
# 立即啟動 MySQL
mysql.server start # 成功
# /etc/logrotate.d/psacct
/var/log/pacct {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0600 root root
sharedscripts
postrotate
/usr/sbin/accton /var/log/pacct 2>/dev/null || true
endscript
}
systemctl stop psacct
systemctl disable psacct
# 或
accton off
tail -100 /var/log/mysqld.log / journalctl -u mysqlddf -h / df -ichown -R mysql:mysql /data/mysqlmysqld --validate-config (8.0+) / mysqld --help --verbose 2>&1 | head -20netstat -tlnp | grep 3306ausearch -m avc -ts recent / aa-statusulimit -a、systemd LimitNOFILE/LimitNPROCfind /var/log /tmp /data -size +1G「File size limit exceeded」不一定是 MySQL 自身配置問題,系統級大文件(審計日誌、核心轉儲、舊備份)同樣能觸發進程文件大小限制。建立日誌輪轉標準化、磁碟告警、啟動前健康檢查機制,將此類「無關痛癢」的系統級故障排除在資料庫故障域之外。