阿里云ECS服务器磁盘已满 MySQL和站点挂了无法访问

微文网

下午我两个站点都无法打开,其中懿古今在CDN中开了全缓存所有偶尔会有打开现象,而网站打开任何页面都是显示“{"msg":"timeout","code":"50402005","id":"ef68d90ce67d6af36ba6471d5a2528a"}”错误提示。刚开始我还以为是 CDN 问题,但是进 CDN 后台看配置也没有任何问题,后来进入到服务器才发现是我的 MySQL 挂了,导致站点也跟着挂了,这也是为什么访问站点总是提示超时的原因。

原因分析及问题定位

既然问题是 MySQL 挂了,那么我就手动重新启动 MySQL(命令:service mysqld start),没想到重启 MySQL 之后瞬间又不见了(也就是自动停止关闭了),在大佬的帮助下才知道出现这种情况是因为服务器磁盘已满造成的。后来看错误日志发现有很多“No space left on device”的信息,而且通过 df –h 查看服务器,我的系统盘确实是爆了,20G 只剩下 293M 使用率达 99%了,怪不得我的服务器不正常。

阿里云ECS服务器磁盘已满 MySQL和站点挂了无法访问 第1张

由于对 Linux 服务器不熟悉,所以不懂如何查找大文件,所以就使用最简单也是最笨的办法就是通过 cd 和 du -sh * 命令来慢慢找出占据我硬盘的“罪魁祸首”。经过一番努力终于定位到占据我大部分硬盘的文件竟然是 MySQL 的日志文件,具体见下图:

阿里云ECS服务器磁盘已满 MySQL和站点挂了无法访问 第2张

向大佬请教之后果断把 MySQL 的这个日志功能关闭了,并删除已经产生的部分日志文件。

关闭 MySQL日志功能

关闭操作很简单,找到配置文件 my.cnf,对于 linux,一般默认在/etc 目录下,打开此文件,使用井号(#)注释掉以下两个配置项目即可。

  1. log-bin=mysql-bin

  2. binlog_format=mixed

命令如下:

  1. vi /etc/my.cnf 或 my.cnf 的路径

把其中的 log-bin=mysql-bin 修改为#log-bin=mysql-bin,binlog_format=mixed 修改为# binlog_format=mixed,具体见下图:

阿里云ECS服务器磁盘已满 MySQL和站点挂了无法访问 第3张

保存 my.cnf 文件后重启 mysql 服务即可生效。

删除已经产生的 MySQL日志文件

直接登录数据库后台打开 SQL 命令,输入以下代码查找当前有哪些二进制日志文件:

  1. show binary logs;

然后删除 bin-log 日志文件,如本文上图所示想要删除 mysql-bin.000204 之前的所有二进制日志文件,只需要输入以下命令之下即可:

  1. purge binary logs to 'mysql-bin.000204';

小结

经过上述一番折腾之后,我的服务器磁盘使用率终于降到 50%以下了,站点也恢复正常了。老实说,我宁愿去折腾主题文件也不愿意折腾服务器,因为我对 Linux 确实不懂,完全玩不转。哪怕是像这次这么简单的折腾,也弄得畏首畏尾的,毕竟折腾不懂的东西,总是有“畏战”心理。每一次折腾服务器都不容易,所以这次也不例外,直接把记录的相关经历记录下来以备后用。

文章版权声明:除非注明,否则均为微文网原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (暂无评论,153人围观)

还没有评论,来说两句吧...