修改innodb_buffer_pool_size 或者加大swap分区空间
查看错误日志err:
-
2019-01-16 10:22:48 39795 [Note] Plugin 'FEDERATED' is disabled.
-
2019-01-16 10:22:48 39795 [Note] InnoDB: Using atomics to ref count buffer pool pages
-
2019-01-16 10:22:48 39795 [Note] InnoDB: The InnoDB memory heap is disabled
-
2019-01-16 10:22:48 39795 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
-
2019-01-16 10:22:48 39795 [Note] InnoDB: Memory barrier is not used
-
2019-01-16 10:22:48 39795 [Note] InnoDB: Compressed tables use zlib 1.2.11
-
2019-01-16 10:22:48 39795 [Note] InnoDB: Using Linux native AIO
-
2019-01-16 10:22:48 39795 [Note] InnoDB: Using CPU crc32 instructions
-
2019-01-16 10:22:48 39795 [Note] InnoDB: Initializing buffer pool, size = 128.0M
-
InnoDB: mmap(137363456 bytes) failed; errno 12
-
2019-01-16 10:22:48 39795 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
-
2019-01-16 10:22:48 39795 [ERROR] Plugin 'InnoDB' init function returned error.
-
2019-01-16 10:22:48 39795 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
-
2019-01-16 10:22:48 39795 [ERROR] Unknown/unsupported storage engine: InnoDB
-
2019-01-16 10:22:48 39795 [ERROR] Aborting
解决方式一:
innodb_buffer_pool_size = 8M (安装MySQL5.6到小于1G内存服务器上,启动MySQL会失败,报内存分配失败的错误,此时,需要修改my.cnf的内存大小从标准128M设置到8M或者64M)
解决方式二:
增加swap缓存,查看free -m或者free -h
-
##创建大小为1024M的文件
-
dd if=/dev/zero of=/swapfile bs=1M count=1024
-
##将该文件变为swap
-
mkswap /swapfile
-
##启用swap文件
-
swapon /swapfile
执行结果打印:
-
[root@instance-zq6zwn1b ~]# dd if=/dev/zero of=/swapfile bs=1M count=1024
-
1024+0 records in
-
1024+0 records out
-
1073741824 bytes (1.1 GB) copied, 15.5654 s, 69.0 MB/s
-
[root@instance-zq6zwn1b ~]# mkswap /swapfile
-
Setting up swapspace version 1, size = 1048572 KiB
-
no label, UUID=4bccb9aa-6e83-442c-97eb-a9c8c1ddd1e6
-
[root@instance-zq6zwn1b ~]# swapon /swapfile
-
##挂载时会报一个权限错误,建议将swapfile文件的权限修改为600
-
swapon: /swapfile: insecure permissions 0644, 0600 suggested.
-
[root@instance-zq6zwn1b ~]# free
-
total used free shared buff/cache available
-
Mem: 995548 245408 72700 19724 677440 564924
-
Swap: 1048572 0 1048572
此时没有写到/etc/fstab,重启需要手动挂载,写到了/etc.rc.local
写入/etc/fstab,以后不用手动挂载。
-
vi /etc/fstab
-
##末尾添加
-
/swapfile swap swap defaults 0 0
===============取消swap分区===================
查看swap:cat /proc/swaps
取消激活:swapoff /swapfile
删除配置的信息:进入 vi /etc/fstab 删除配置的信息
删除文件:rm -f /swapfile
查看swap使用情况:swapon -s
显示分区信息:sfdisk -l
swap分区一般为内存的2倍,但最大不超过2G
一般来说可以按照如下规则设置swap大小:
4G以内的物理内存,SWAP 设置为内存的2倍。
4-8G的物理内存,SWAP 等于内存大小。
8-64G 的物理内存,SWAP 设置为8G。
64-256G物理内存,SWAP 设置为16G。
系统在什么情况下才会使用SWAP?
实际上,并不是等所有的物理内存都消耗完毕之后,才去使用swap的空间,什么时候使用是由swappiness 参数值控制。
cat /proc/sys/vm/swappiness
swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,
swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
现在一般都尽可能设置小写。
永久修改:
在/etc/sysctl.conf 文件里添加如下参数:
vm.swappiness=10
然后reboot now