mysql8.0 查询的时候自动退出,被杀死进程。
网上的方法千篇一律,在看到这篇文章,希望你有耐心的看完,可以帮助你解决问题。
原因
服务器内存过小,而mysql占用过多,导致被linux内核杀死。 首先通过free
命令来查看内存,应该剩余不多。
shell
free -m
free -m
解决办法
解决办法分为2个步骤,缺一不可。
- 调整缓冲区占用大小
这个值默认是128M,可以改成64M,32M等。
shell
innodb_buffer_pool_size=32M
innodb_buffer_pool_size=32M
- 调整linux Swap/虚拟内存大小
这里推荐是512Mb,可以根据实际情况来调整,count的值就是缓冲区的大小
在/mnt/创建一个512M的512Mb.swap文件
sudo dd if=/dev/zero of=/mnt/512Mb.swap bs=1M count=512
sudo dd if=/dev/zero of=/mnt/512Mb.swap bs=1M count=512
注:bs = block size 区块大小; count = 区块个数;
格式化文件,使之成为swap(交换设备)
sudo mkswap /mnt/512Mb.swap
sudo mkswap /mnt/512Mb.swap
更改权限为0600,不然会报错
chmod 0600 /mnt/512Mb.swap
chmod 0600 /mnt/512Mb.swap
将swap加入到现有系统中
sudo swapon /mnt/512Mb.swap
sudo swapon /mnt/512Mb.swap
编辑 /etc/fstab 文件
vim /etc/fstab
vim /etc/fstab
在文件末尾增加一句
/mnt/512Mb.swap none swap sw 0 0
/mnt/512Mb.swap none swap sw 0 0
做永久性变更
sudo nano /etc/fstab
sudo nano /etc/fstab
保存退出。这样重启后Swap分区也依然有效。
添加后我们可以通过free命令查看内存和缓冲区的大小
free -m
free -m
输出:
total used free shared buff/cache available
Mem: 3932 3404 317 22 210 268
Swap: 5120 1373 3747
total used free shared buff/cache available
Mem: 3932 3404 317 22 210 268
Swap: 5120 1373 3747
我配置了2个缓冲区,总共5120M,大家可以根据自己的需要来调整大小。
注: 本文部分引用了:https://eliyar.biz/cannot-allocate-memory-for-the-buffer-pool/