阿里云 ECS 服务器 MySQL 经常自动挂掉 / 停止的解决方法

已关闭留言

之前有一台阿里云的香港 VPS,上面挂了个网站,发现没几天 MySQL 就会挂一次,一直以为是没配好(现在看来确实是没配好)。后来买了台阿里云的新加坡 VPS,发现一开始流量少的时候还正常,但是后来流量多了以后,MySQL 也开始一两天就挂一次了。之前是加了个 crontab 每小时自动重启一次,现在忍受不了了,查了下解决方案,记录一下。

一般来说,这种问题的原因很简单:MySQL 占用了太多的系统内存,然后被 kill 了。

详细的自己查找错误的方法可以查看参考文献第一个。下面记录一下解决方法。

文章目录
隐藏
修改 InnoDB Buffer Pool Size
添加 SWAP 分区
更多操作
参考文献

修改 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  // 修改为你需要限制的最大连接数

暂时就这些,观察几天看看效果。

参考文献

  • http://robinchen.me/tech/2016/03/14/tech-aliyun-centos-mysql-shutdown-itself-irregularly.html
  • http://www.imysql.com/comment/16414
  • https://hongjiang.info/aliyun-vps-mysql-aborting/