阿里云服务器mysql莫名丢失_阿里云服务器的MySQL莫名其妙的挂了 之 优化篇

前几天刚解决了阿里云服务器因为Bash漏洞被人恶意攻击,导致服务器CPU占用率已经居高不下问题。修复后稳定运行了几天,今天早上居然又挂了。显示数据库连接失败。太郁闷了,难道又让人给黑了?

没办法,只能好好分析分析问题了,毕竟人生就是一个不断发现问题,解决问题的过程。

第一步,我们先来看看阿里云的云盾攻击日志。

看了一下没发现什么问题,一切都很正常。说明不是因为Web攻击导致的数据库异常。

第二部,看一下数据库的日志。

vi /var/log/mysql.err

vi /var/log/mysql.log

日志都是空的,也没看出啥问题来。

第三部,看一下系统日志。

vi /var/log/syslog

里面日志很多,搜一下mysql,发现问题了。

0818b9ca8b590ca3270a3433284dd417.png

syslog日志

问题就出现在这个里面,根据描述应该是系统内存用光了,然后mysql进程被kill掉了。

想想很可能就是这个原因,因为这个服务器是2013年的时候买了,当初只买了512M的内存,也确实太少了一点。

那就花点钱,升级一下配置吧。

那么问题来了,能不能不多花钱也解决这个问题呢?那当然得试试了。那能从哪些地方来控制系统的内存使用呢?

要么是apache,要么是PHP,要么是mysql,那都优化一下吧。

对于PHP鉴于博客和其他系统都是用的开源的程序,不太好改动,如果限制PHP的内存大小,可能是引起程序的报错,也不太好优化。

对于apache呢,可以通过apache的配置文件来优化一下。

减少 php-fpm 的资源占用,可根据自身情况进行修改

pm = dynamic

如何控制子进程,选项有static和dynamic。

如果选择static,则由pm.max_children指定固定的子进程数。

如果选择dynamic,则由下开参数决定:

pm.max_children ,子进程最大数

pm.start_servers ,启动时的进程数

pm.min_spare_servers ,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程

pm.max_spare_servers ,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理

对于专用服务器,pm可以设置为static。

如果服务器是使用的nginx的话,也可以进行一些配置上的优化:

一个CPU进程,256个线程即可。

worker_processes 1;

worker_connections 256;

那接下来优化一下mysql吧,既然系统内存使用溢出,apache没有挂,mysql挂了,那说明MySQL有更大的优化空间。

1、降低数据库 InnoDB 引擎的缓冲区大小

在 /etc/my.cnf 的 mysqld 下添加下面一句:

innodb_buffer_pool_size = 64M

说明:WordPress 默认使用 InnoDB 数据库引擎;innodb_buffer_pool_size 设置的是缓冲区的大小,默认值为 128M。

鉴于个人博客访问量不会太大,因此适当降低缓冲区的大小以减轻内存压力。

2、最后重启 MySQL 使操作生效

补充说明一下:如果不需要 MySQL 的 InnoDB 引擎可以将其关闭。

default-storage-engine = MYISAM   #默认数据库引擎改为MYISAM

loose-skip-innodb                 #关闭Innodb支持

从各个方面优化一下,感觉还不错哦。持续运行一段时间观察一下,看看还有没有问题,同时也给大家分享一下这次的优化经历。


版权声明:本文为weixin_39575410原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。