Skip to content →

关于mysql的log-bin的一次经历

一、开端

我的几个网站都是放在自己的服务器上,特别是一些测试程序,会对数据库进行大量操作。因为最近在学习Hadoop,用的都是本地的虚拟机,所以没关注自己的服务器状况。直到DNSPOD发邮件提醒我的网站暂时无法访问,于是我立刻测试了一下,发现真的没法访问(基于WordPress的网站),但一下小一些的网站还是可以访问,这让我有些纳闷。于是登录网站的管理面板AMH4.2,发现无法登录成功,一直提示 验证码错误 ,至此,我意识到或许服务器出问题了。登录主机商的管理后台,发现磁盘占用率100%(30G的SSD硬盘,平常占用5G左右),这让我很费解,于是SSH登录服务器。

二、Linux下查看文件(夹)磁盘占用

查看磁盘还剩多少空间,用df的命令:

# df -h

对于知道当前的文件夹下的磁盘使用情况:

# du --max-depth=1 -h

多次使用上面两个命令之后确认是mysql占用了近25G的磁盘空间,随着目录的一点点深入,最后发现mysql存储数据的目录下有多个类似mysql-bin.000***的文件,基本都在1G大小,于是百度相关知识。

三、MySQL的log-bin的日志功能

这些形如mysql-bin.00001的文件主要是用来做什么的呢?

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

2:主从服务器之间同步数据
主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。如果不想要这些文件应该怎么做呢?

1):只有一个mysql服务器,那么可以简单的注释掉这个选项就行了。

vi /etc/my.cnf

把里面的 log-bin 这一行注释掉,重启mysql服务即可。

2):如果你的环境是主从服务器,那么就需要做以下操
作了。
A:在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
B:使用SHOW MASTER
LOGS获得主服务器上的一系列日志。
C:在所有的从属服务器中判定最早的日志,这个是目标日志,如果所有的
从属服务器是更新的,就是清单上的最后一个日志。
D:清理所有的日志,但是不包括目标日志,因为从服务器
还要跟它同步。
简单地说,这些MySQL目录下的形如mysql-bin.000***的文件时MySQL的事务日志。

删除复制服务器已经拿走的binlog是安全的,一般来说网络状况好的时候,保留最新的那一个足以。缺点是将无法使数据库恢复先前的状态

补充:

mysql-bin文件过多会占用大量的磁盘空间,所以要对日志文件进行清理,方法如下:
1、禁止方法: vi /etc/my.cnf把里面的
#log-bin=mysql-bin
注释掉,重启mysql服务即可.(SSH登录后使用 mysql -uXXX -p 登录数据库)
2、mysql> reset master;或flush logs; (清除日志文件)
3、mysql> set global expire_logs_days=2;只保留两天的mysql-bin日志
4、删除ablelee.000003之前的而没有包含ablelee.000003
      mysql> purge binary logs to ‘ablelee.000003’;

 

最后,有自己的服务器的朋友,平常除了要及时更新漏洞补丁升级软件,还要关注一下其他的方面。

Published in 编程应用

10 Comments

  1. seo

    seo

    太感谢楼主了!文章不错~加油~

  2. seo

    seo

    技术控

  3. 亲,2015发福利啰,独立ip主机限时抢啦。

发表评论

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