发布日期:2017-04-09 16:31:25

刚装的mysql启动后用了不久后发现连接不上了。

进入server发现原先存在的mysql.socket丢失了。

什么原因?

重启server后这个mysql.socket又重新创建了。

但是有了一阵子又丢了。有空研究一下什么问题。

查看了error日志看到一些error信息。

[ERROR] InnoDB: Cannot allocate memory for the buffer pool
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

原因就是内存不够。

解决办法有三种:

1. 增加物理内存。简单粗暴。

2. 减少buffer size。牺牲性能,具体要看自己的server情况。有时未免不是办法。

## Edit /etc/my.cnf, and add the following line under the [mysqld] heading.
[mysqld]
innodb_buffer_pool_size=64M

3. 创建虚拟内存swap.

可以先查看是否配置了swap.

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 说明没有配置swap文件。

配置swap文件

## As a root user, perform the following:
# dd if=/dev/zero of=/swap.dat bs=128M count=0 seek=24
# chmod 600 /swap.dat
# mkswap /swap.dat
# swapon /swap.dat
## Edit the /etc/fstab, and the following entry.
/swap.dat      none    swap    sw      0       0 

配置后可以看swap到虚拟内存的频繁度(0-100)%

cat /proc/sys/vm/swappiness

30

可以通过这个命令来调整

sysctl vm.swappiness=10
vi /etc/sysctl.conf
At the bottom, you can add:

vm.swappiness=30

参考文档:

  • http://www.cnblogs.com/wwufengg/articles/mysqld-sock-lost.html
  • http://www.webtrafficexchange.com/solved-mysql-crash-fatal-error-cannot-allocate-memory-buffer-pool
  • https://stackoverflow.com/questions/25965638/mysql-fatal-error-cannot-allocate-memory-for-the-buffer-pool/32932601
  • https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04

发表评论