阿里云服务器 MySQL 经常自动停止、挂掉并重启的解决方式

问题情景概述:

① 阿里云服务器 MySQL 经常自动停止、挂掉、重启。

② 阿里云CentOS 7 WordPress 运行时经常数据库连接不上

③ CentOS 7 + Nginx + PHP + MySQL

打开 MySQL 的 error.log 错误信息,在阿里云 Cent OS 的路径为 :

error.log中相关的信息截图如下所示:

但从 以上 error.log 中很难找出哪里出了问题。去 Google 了一下,给你的方案基本上修改”/alidata/server/mysql/my.cnf”:

innodb_buffer_pool_size = 64M
# 默认为128M,修改成64M、32M或者8M,但实际上重启 MySQL 之后以为能运行,实际上过了一会 MySQL 还是会出现不知原因地自动关闭。

回头再分析error.log,请注意看这一行:

这句话说明了 MySQL 非正常关闭, MySQL 也不知道自己为什么被关闭掉了。。。囧。于是 MySQL 觉得真奇怪,自己又重启了自己的进程Starting Crash Recovery,如下:

接着,大家可以发挥想象力猜想下这条日志:

继续 Google,发现原来是这里在捣鬼,才出现了 MySQL 再重启后,又继续自动关闭,再重启。于是尝试按照 StackOverflow 上面的 suggestions 去做:

Drop your ib_log files and Put innodb_force_recovery=6 in config file and restart your mysql it will resolve

重启又可以了。。。,没一会,嚓,MySQL 又宕机了!这次不仅宕机了,还有副作用,error.log 又多了个因 **innodb_force_recovery = **而引起的错误。

怎么办呢?现在我们还是回到下面这条日志:

现在我们要看看,为什么 MySQL 会不正常关闭呢?!我们打开top看看,下面使用**top**进行查看(现在已经正常):

通过 top 命令发现 MySQL 进程占用的 VIRT 居然这么多!这时,你要是多刷新几下服务器上搭建的 WordPress 网站主页,会出现 MySQL 内存占用率超过 50% 的情况,这时 MySQL 进程就会被 Linux 内核杀死。也就出现了我们在 MySQL 的 error.log 中看到的”[Note] InnoDB: Database was not shutdown normally” 日志了。

为了确认这个猜测是否属实,我们去查看下 Kernel 日志,路径及具体信息如下所示:

看最后几条内容:

Finally,终于找到原因了,内存不够,杀死了 mysqld 进程。如何解决呢?优化方案如下所示:

⑴ 创建 SWAP 分区:

参考教程:How do you add swap to an EC2 instance?

a. 逐条运行下面的命令:

b.将下面一行添加到 /etc/fstab,服务器重启时自动启动 swap:

⑵ 降低数据库 InnoDB 引擎的缓冲区大小,以及限制 MySQL 的最大连接数(max_connections):

修改完成后重启 MySQL:service mysqld restart

注解:max_connections 的默认值是 151,可以动态更改这个值。参见:max_connections 

⑶ nginx 优化:

Optimizing Nginx Configuration

打开”/alidata/server/nginx/conf/nginx.conf”:

优化配置如下所示:

修改完重启 nginx:service nginx restart

如有必要,可以重启服务器:reboot

OK,it’s done!

—EOF—

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注