Centos7 MySQL 错误 InnoDB: Cannot allocate memory for the buffer pool
最近跑博客的小机总出现 Mysql 挂掉的情况
日志如下:
2020-03-29T12:47:50.856945Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M 2020-03-29T12:47:50.942730Z 0 [ERROR] InnoDB: mmap(139722752 bytes) failed; errno 12 2020-03-29T12:47:50.942773Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool 2020-03-29T12:47:50.942783Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error 2020-03-29T12:47:50.942797Z 0 [ERROR] Plugin 'InnoDB' init function returned error. 2020-03-29T12:47:50.942803Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 2020-03-29T12:47:50.942811Z 0 [ERROR] Failed to initialize builtin plugins. 2020-03-29T12:47:50.942816Z 0 [ERROR] Aborting
查看内存,发现内存2G 应该是足够用的。再看 Swap,`total`为0
[root@4wei_cn log]# free -m total used free shared buffers cached Mem: 2005 1937 68 131 0 138 -/+ buffers/cache: 1799 206 Swap: 0 0 0
解决的办法是给小机加点内存,如果或者加点 Swap。加大内存可以在配置文件中上调innodb buffer.
[mysqld] pid-file=/var/run/mysqld/mysqld.pid log-error=/var/log/mysqld.log datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" thread_stack = 512k character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4' skip-character-set-client-handshake = true innodb_buffer_pool_size=512M max_connections=100 max_allowed_packet=10M [client] default-character-set=utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
如果内存扩容比较复杂,或者考虑使用 Swap 也可以。
swapon -s fallocate -l 4G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile swapon -s free -m
最后呢,添加开机启动挂载 swap,修改 `/etc/fstab` 添加行
/swapfile swap swap defaults 0 0