mysql的binlog日志手动删除和自动清理

来源:互联网 发布:王宇直 知乎 编辑:程序博客网 时间:2024/05/22 14:55

        mysql中的binlog打开对于工作维护来说是必要的,但是binlog文件相对较大,如果不管不问的任由binlog自由输出的话,总有一点会把磁盘占满。当磁盘空间不足时,导致数据库卡死状态,断链状态。此时数据库只可以查询操作,不可以update/delete的操作。(至于为什么个人理解的时候服务访问的是数据库缓存的数据)


【解决办法】

    1、当务之急,先手动清理旧的binlog日志,保留足够的空间可用。三种清理方式,如下:

        1)PURGE MASTER LOGS TO 'MySQL-bin.010';                          //指定清理某文件前所有的文件
        2) PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00';        //清理2008-06-22 13:00:00前binlog日志
       3) PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);    //清理3天前binlog日志BEFORE,变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。这里的清理是指从此刻-3*24*3600s前的文件,是此文件最后更新的时间。

 注意:不要强制使用rm命令进行清除。否则,mysq-bin.index错乱,最终导致后期expire-log-days配置项失效。
 2、增加自动清理binlog的方式,保证binlog占用空间不在肆意扩张。配置清理的方式,有两种:
   1) 不重启mysql即可生效的方式:
      a) mysql -u用户名 -p密码
      b) mysql> set global expire_logs_days = 5;           //设置有效期,清理5天前的binlog的配置
     mysql> flush logs;                                              //刷一下log使上面的设置生效,否则不生效。
        这里是清理的当前时间的5天前的文件,此时刷新了flush logs,binlog文件也切换新的文件了。
        注意:此配置重启mysql后失效。
  2)  重启mysql有效的方式:
       在my.cnf配置文件中的[mysqld]中增加expire_logs_days = 10,配错位置不生效。
PS:
  1)my.cnf配置文件中三项分别代表什么,如下:
     [client]代表客户端默认设置内容     [mysql]代表我们使用mysql命令登录mysql数据库时的默认设置     [mysqld]代表数据库自身的默认设置
  2)对于清理这个动作是flush logs这个命令起作用的,而flush logs又如何触发呢?主要有三种情况:
       a)重启mysql,切换新的binlog文件;
       b)binlog文件到参数max_binlog_size限制;
       c)手工执行命令。 

原创粉丝点击