MySQL「Cannot allocate memory for the buffer pool」エラーが出て起動できないまたは落ちる場合の対処法
新しい環境でMySQLをスタートさせようとしたら…
[dacelo@space mysql]$ sudo service mysqld start MySQL Daemon failed to start. mysqld を起動中: [失敗]
あら。何か失敗している。
ログで原因を把握
起動時のログを確認してみると…
[dacelo@space mysql]$ view log/mysqld.log 略 2019-07-25 14:10:00 11730 [Note] InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap(137363456 bytes) failed; errno 12 2019-07-25 14:10:00 11730 [ERROR] InnoDB: Cannot allocate memory for the buffer pool 2019-07-25 14:10:00 11730 [ERROR] Plugin 'InnoDB' init function returned error. 2019-07-25 14:10:00 11730 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 2019-07-25 14:10:00 11730 [ERROR] Unknown/unsupported storage engine: InnoDB 2019-07-25 14:10:00 11730 [ERROR] Aborting 略
これだ。
InnoDB: Cannot allocate memory for the buffer pool
ここで止まっているのだ。
このサーバはわずか1GBしかメモリを積んでいない弱サーバのため、FREEが69MBしか残っていない。だからMySQLが必要なメモリ量を確保できないため、起動すらできていないのだ。
[dacelo@space/]$ free -m total used free shared buffers cached Mem: 988 918 69 0 117 548 -/+ buffers/cache: 253 734
ここはスワップを追加して凌ぐこととしよう。
といってもディスク容量も少ないのだが…
広告
ディスク容量を確認
[dacelo@space mysql]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 15G 6.2G 7.8G 45% / tmpfs 495M 0 495M 0% /dev/shm
スワップを作成
[dacelo@space /]$ sudo dd if=/dev/zero of=/home/swapfile bs=1M count=512 512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 1.36466 s, 393 MB/s [dacelo@space /]$ sudo mkswap /home/swapfile mkswap: /home/swapfile: warning: don't erase bootbits sectors on whole disk. Use -f to force. スワップ空間バージョン1を設定します、サイズ = 524284 KiB ラベルはありません, UUID=0e204a7a-0dd9-4ace-83cd-0ba4f6b182c5 [dacelo@space /]$ sudo swapon /home/swapfile
もう一回ディスク容量を確認
[dacelo@space /]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 15G 6.7G 7.3G 49% / tmpfs 495M 0 495M 0% /dev/shm
メモリを確認
[dacelo@space /]$ free -m total used free shared buffers cached Mem: 988 918 69 0 117 548 -/+ buffers/cache: 253 734 Swap: 511 0 511
再度の起動に挑戦
[dacelo@space /]$ sudo service mysqld start mysqld を起動中: [ OK ]
ひとまずこれでめでたしめでたし。