爱上极客's Archivers

From yan on 2016-04-05 11:07:39

记一次系统宕机的解决过程——mysql日志文件mysql-bin.*占磁盘空间过大

由于博主比较偏好网络技术且热衷于DIY,故从建博起就没有打算过CSDN等博客网站。从2007年起开始租用虚拟空间,到使用vps、云主机等直到现在采用ECS,每一阶段都需要大量的时间和精力去摸索和维护,虽然维护的过程是很艰难和急躁的,但是还是很乐于使用自己打造的东西,俗话说我的地盘我做主。

大部分博主为了省去不必要的时间和精力,一般采用CSDN等博客类网站,通过注册账号采用其平台进行博文的发布,这样的好处是降低建博成本、博客运行稳定、对蜘蛛的抓取也是很好的支持。但是美中不足就是缺少了个性化的能力,博主处女座,追求完美,所以目前本博是采用ECS+CDN的形式进行搭建的,因此,对系统的日常维护显得尤为重要而且消耗的精力较大。本文则记录一次困扰我三天的宕机问题解决过程,分享供有需要的人参考。

问题引出


前天登陆网站后发现了个奇怪的问题:首先,标签无法显示,其次,后台无法登陆,最后,文章页展示不出来(页面空白,后台报500错误)

问题分析


遇到问题后,十分纠结,首先我没有修改过后台文件,所以由代码导致的故障可以pass掉了。基本定位是系统故障或者黑客攻击。

虽然说我的服务器上每天承受着几百甚至上千人的各种攻击(密码尝试、sql注入、DDoS等等),但是我素来友好并无什么仇人,对这毫无价值的博客进行恶性攻击有点匪夷所思。登陆服务器后,进行了检测,发现并不是黑客的问题。

这下又陷入了疑惑,既然代码没问题,还不是黑客攻击,因为长期运行导致的宕机问题,很显而易见只能是数据库了,只有它可以自己的读写进行处理,而且前台的文章等内容都无法读取。

故进入服务器,重启服务器、重启mysql后,网站恢复正常。基本地位到问题根源(第一天,共耗4小时)

问题定位


当定位到是mysql数据库出现了问题后,对于是什么问题,如何修复依旧未知。

当重启后,过了几分钟又出现了同样的问题。原以为是数据库中表需要优化或修复,后来经过一系列的操作:卸载、安装、修改配置文件、修复等等均无济于事。更大的问题是,mysql一旦关闭就无法启动,而且查看/var/log/mysqld.log 是空文件。

经过一天折腾后,仍没有找到问题根本,但是基本知道是mysql的问题,尝试了无数次重装都无效而且日志文件是空。最终为了不影响博客的使用,博客土豪的采用了ECS+RDS+CDN的模式进行部署(第二天,共耗3小时)

第三天,在尝试更换新版本的mysql 5.5时,遇到了个问题无法安装,提示系统空间不足。于是我就困惑了,20G的硬盘不会因为挂个wordpress就满了吧?!通过df -lh查看了下硬盘的使用情况,顿时我惊呆了,20G的硬盘竟然使用率100%,究竟是什么占用了这么大的空间呢?

使用du -sh /root查看了下各个文件夹的使用,发现有个文件夹竟然占用了18G的大小,不断的深入发现了根源/var/lib/mysql下的N个mysql-bin.*文件,每个文件从几k到几G不等,上网查了下了解到,原来是mysql的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的。


因此定位问题:mysql的操作日志过大(四个月)已经18个G了,导致占据硬盘空间,使数据库无法正常使用导致宕机。



问题解决


1、进入mysql:mysql -u root -p

2、输入清楚日志文件命令:reset master;

<img class="aligncenter size-full wp-image-1193" src="http://www.i3geek.com/wp-content/uploads/2016/04/QQ20160405-1.png" alt="QQ20160405-1" width="803" height="281" />

可能会遇到问题:ERROR 1186 (HY000): Binlog closed, cannot RESET MASTER,原因是已经关闭了日志系统,所以无法清除,具体看下文问题解答。

问题避免


mysql数据文件才几百兆,而日志文件达到十几G,这究竟是有什么作用呢?这主要有两个作用:

(1)数据恢复

如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。

(2)主从服务器之间同步数据

主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。

但是对于我这种小型服务器其实并不需要这样的日志系统,反而会影响我整个系统的运行。所以可以进行取消,方法如下:

1、打开mysql配置文件:vi /etc/my.cnf

2、将log-bin=mysql-bin和binlog_format=mixed 这两条注释掉即可.#log-bin=mysql-bin #binlog_format=mixed

问题解答


1、mysql启动错误:mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended


修改:vi /etc/my.cnf

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/lib/run/mysql/mysqld.pid
改成
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/lib/mysql/mysqld.pid

2、重装mysql后,启动失败


在重新安装mysql后需要重新初始化下,设置密码,办法,执行:mysql_secure_installation

3、数据库导入中,提示错误:#1115 - Unknown character set: 'utf8mb4'


把utf8mb4 替换成 utf8 就可以了

4、数据库导入中,提示错误:#1153 - Got a packet bigger than 'max_allowed_packet' bytes


修改:vi /etc/my.cnf将max_allowed_packet值调大即可

5、遇到错误ERROR 1186 (HY000): Binlog closed, cannot RESET MASTER


开启服务器的日志系统,修改:vi /etc/my.cnf取消注释log-bin=mysql-bin和binlog_format=mixed

技术记录


1、centos彻底删除mysql


yum remove mysql mysql-server mysql-libs compat-mysql51
rm -rf /var/lib/mysql
rm /etc/my.cnf
查看是否还有mysql软件:
rpm -qa|grep mysql
有的话继续删除

2、安装mysql


(1)安装MySQL

(2)为root账户设置密码:mysql_secure_installation后/etc/init.d/mysqld restart #重启

(3)安装PHP组件,使 PHP5 支持 MySQL

<img class="aligncenter size-full wp-image-1194" src="http://www.i3geek.com/wp-content/uploads/2016/04/ef90a470862f59e98feb82545e47f10b.jpg" alt="ef90a470862f59e98feb82545e47f10b" width="615" height="361" />

查看完整版本: 记一次系统宕机的解决过程——mysql日志文件mysql-bin.*占磁盘空间过大

From monidaisy on 2017-11-09 17:25:36

以前也碰到过这个坑,你的这个博客应该是基于wordpress吧? 以前也见过另一个人的博客和你这个基本上一样

Tags: MySQL, 宕机, 日志, 问题解决


©爱上极客