一、问题现象:
1.服务器(ubuntu 17.04)安装mysql服务时出错。
2.查看日志(cat /var/log/mysql/error.log )发现如下错误:
2017-12-27T08:36:46.406267Z 0 [ERROR] InnoDB: mmap(137428992 bytes) failed; errno 12
2017-12-27T08:36:46.406283Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2017-12-27T08:36:46.406292Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2017-12-27T08:36:46.406310Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2017-12-27T08:36:46.406319Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2017-12-27T08:36:46.406345Z 0 [ERROR] Failed to initialize plugins.
2017-12-27T08:36:46.406351Z 0 [ERROR] Aborting
二、错误原因:
1.是由于操作系统没有配置swapfile(分配swap空间)导致的。
三、解决方案:
1.执行free -m
total used free shared buffers cached
Mem: 604340 587364 16976 0 29260 72280
-/+ buffers/cache: 485824 118516
Swap: 0 0 0
Swap: 0 表示没有 swapfile.
2.添加swapfile
sudo fallocate -l 1g /mnt/1GiB.swap
fallocate size suffixes: g = Giga, m = Mega, etc. (See man fallocate).
If fallocate fails or it not available, you can use dd:
sudo dd if=/dev/zero of=/mnt/1GiB.swap bs=1024 count=1048576
We need to set the swap file permissions to 600 to prevent other users from being able to read potentially sensitive information from the swap file.
sudo chmod 600 /mnt/1GiB.swap
Format the file as swap:
sudo mkswap /mnt/1GiB.swap
Enable use of Swap File
sudo swapon /mnt/1GiB.swap
The additional swap is now available and verified with: cat /proc/swaps
Enable Swap File at Bootup
Add the swap file details to /etc/fstab so it will be available at bootup:
echo '/mnt/1GiB.swap swap swap defaults 0 0' | sudo tee -a /etc/fstab