之前有一台阿里云的香港 VPS,上面挂了个网站,发现没几天 MySQL 就会挂一次,一直以为是没配好(现在看来确实是没配好)。后来买了台阿里云的新加坡 VPS,发现一开始流量少的时候还正常,但是后来流量多了以后,MySQL 也开始一两天就挂一次了。之前是加了个 crontab 每小时自动重启一次,现在忍受不了了,查了下解决方案,记录一下。
一般来说,这种问题的原因很简单:MySQL 占用了太多的系统内存,然后被 kill 了。
详细的自己查找错误的方法可以查看参考文献第一个。下面记录一下解决方法。
修改 InnoDB Buffer Pool Size
首先我们需要减少 InnoDB 缓存池的大小。关于 InnoDB,可以查看参考文献2。这里直接说一下方法。
找到 MySQL 的配置文件,一般在 /etc/mysql/my.cnf
或者 /etc/my.cnf
这种位置。找到后,编辑配置文件,修改下列行:
innodb_buffer_pool_size = 64M
如果没有 innodb_buffer_poll_size
,增加这一行。
添加 SWAP 分区
阿里云的 ECS 服务器一般都不会自带 SWAP,我们需要手动添加。步骤如下:
dd if=/dev/zero of=/swapfile bs=1M count=1024 // 此处 1024 是 swap 的大小,可以自己修改。 mkswap /swapfile swapon /swapfile
然后添加下面这行到 /etc/fstab
:
/swapfile swap swap defaults 0 0
完成上述操作后,记得重启一下 MySQL。
更多操作
除了上述这些,我们还可以进一步限制 MySQL 的连接数。还是修改 MySQL 配置文件,添加或者修改下面这一行:
max_connections = 100 // 修改为你需要限制的最大连接数
暂时就这些,观察几天看看效果。