刚装的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
参考文档: