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

服务器 yan 660℃ 0评论 已收录

由于博主比较偏好网络技术且热衷于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;

QQ20160405-1

可能会遇到问题: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

改成

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

2、安装mysql

(1)安装MySQL

  • yum install mysql mysql-server #询问是否要安装,输入Y即可自动安装,直到安装完成
  • /etc/init.d/mysqld start #启动MySQL
  • chkconfig mysqld on #设为开机启动
  • cp /usr/share/mysql/my-medium.cnf /etc/my.cnf #拷贝配置文件(注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可)

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

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

  • yum install php-mysql php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-bcmath php-mhash libmcrypt
  • /etc/init.d/mysqld restart #重启MySql
  • /etc/init.d/httpd restart #重启Apche

ef90a470862f59e98feb82545e47f10b

关注<爱上极客>公众号,定期推送精彩内容!

喜欢 (2)

如未说明则本站原创,转载请注明出处:爱上极客 » 记一次系统宕机的解决过程——mysql日志文件mysql-bin.*占磁盘空间过大


0
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址