您的位置:首页 > 数据库 > MySQL

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

2017-07-07 21:27 549 查看
       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)手工执行命令。 

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql