線上環境因根分區 100% 滿載,導致 MySQL 初始化建立 ib_logfile2 失敗,服務無法啟動。本文完整記錄從錯誤日誌分析、磁碟擴容、重新初始化到驗證啟動的全過程,並補充 mysqld_safe 守護進程與舊版 mysqld 殘留導致參數衝突的避坑指南。
InnoDB: Error: Write to file ./ib_logfile2 failed at offset 0 97517568. InnoDB: 1048576 bytes should have been written, only 167936 were written. InnoDB: Operating system error number 2. InnoDB: Error number 2 means 'No such file or directory'. InnoDB: Error in creating ./ib_logfile2: probably out of disk space
df -h 確認根分區 Use% 100%,無可用空間。
/dev/sdb。fdisk /dev/sdb → mkfs.ext3 /dev/sdb1。rm -rf /data # 釋放舊空間
mount /dev/sdb1 /data # 掛載新磁碟
mkdir -p /data/mysql/mysql_3306/{data,logs,tmp}
chown -R mysql:mysql /data/mysql
/etc/fstab 新增 /dev/sdb1 /data ext3 defaults 0 0。./scripts/mysql_install_db --user=mysql --defaults-file=/etc/my.cnf(注意:必須先 chown 再初始化)。| 方式 | 命令 | 特點 |
|---|---|---|
| service | service mysql start | 標準 SysV 初始化腳本 |
| init.d | /etc/init.d/mysql start | 同上,別名 |
| mysqld_safe | mysqld_safe --defaults-file=/etc/my.cnf & | 推薦:守護進程,自動重啟崩潰的 mysqld |
系統預裝 MySQL 5.0 的 /usr/libexec/mysqld 被 mysqld_safe 調用,不識別 5.5 參數(如 slow_query_log_file、long_query_time=0.5)。
修復:cp /usr/local/mysql/bin/mysqld /usr/libexec/mysqld 覆蓋舊二進制,再用 mysqld_safe 啟動即可。
kill -9# 觀察 mysqld_safe 日誌:mysqld restarted ps -ef | grep mysql # 新 mysqld PID 出現,mysqld_safe PID 不變
確認 mysqld_safe 為真正的守護者,生產環境務必採用此方式啟動。