ps -aux | grep mysql 無進程。InnoDB: mmap(137363456 bytes) failed; errno 12
InnoDB: Cannot allocate memory for the buffer pool
Plugin 'InnoDB' init function returned error
Unknown/unsupported storage engine: InnoDB
Aborting
free -m 顯示物理內存 991 MB,可用 461 MB,Swap 為 0。innodb_buffer_pool_size(默認 128 MB)仍無法啟動。
3. 懷疑:無 Swap 導致內存分配失敗時無緩衝,直接 OOM Kill 或分配失敗。
# 1. 創建 2GB 空文件
dd if=/dev/zero of=/udata/men.swap bs=1k count=2048000
# 2. 格式化為 Swap
mkswap /udata/men.swap
# 3. 掛載啟用
swapon /udata/men.swap
# 4. 寫入 /etc/fstab 永久生效
echo '/udata/men.swap swap swap defaults 0 0' >> /etc/fstab
# 或使用 UUID(blkid 獲取)
# UUID=xxxx swap swap defaults 0 0
free -m
# total used free shared buff/cache available
# Mem: 991 857 73 0 60 41
# Swap: 1999 67 1329
service mysqld start
# Starting MySQL.... SUCCESS!
malloc 申請大塊內存(如 Buffer Pool 128 MB)時,若物理內存不足但有 Swap,內核會將非活躍頁換出到 Swap,騰出物理頁滿足分配;無 Swap 則直接返回 ENOMEM (errno 12)。innodb_buffer_pool_size=128M,1 GB 內存機器扣除 OS、Apache、PHP 後可用不足 128 MB,分配失敗。innodb_buffer_pool_size:如 64-96 MB,留足 OS 內存。performance_schema=OFF、query_cache_size=0。Swap used > 10% 觸發擴容或優化。參考國外同款案例:Solved: MySQL Crash - Cannot allocate memory for the buffer pool
一個 Swap 文件,讓 1 GB 內存也能穩穩跑起 MySQL 5.6。