当前位置:数据库 > 数据库管理> 正文

如何清除mysql的binlog

时间:2014-3-21类别:数据库

如何清除mysql的binlog

如何清除mysql的binlog

一、什么是binlog


binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。

 

二、binlog作用


因为有了数据更新的binlog,所以可以用于实时备份,与master/slave复制

 

三、和binlog有关参数


log_bin
设置此参数表示启用binlog功能,并指定路径名称


log_bin_index
设置此参数是指定二进制索引文件的路径与名称


binlog_do_db
此参数表示只记录指定数据库的二进制日志
 

binlog_ignore_db
此参数表示不记录指定的数据库的二进制日志
 

max_binlog_cache_size
此参数表示binlog使用的内存最大的尺寸
 

binlog_cache_size
此参数表示binlog使用的内存大小,可以通过状态变量binlog_cache_use和binlog_cache_disk_use来帮助测试。


binlog_cache_use:使用二进制日志缓存的事务数量
 

binlog_cache_disk_use:使用二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量


max_binlog_size
Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束

sync_binlog
这个参数直接影响mysql的性能和完整性

sync_binlog=0
当事务提交后,Mysql仅仅是将binlog_cache中的数据写入Binlog文件,但不执行fsync之类的磁盘 同步指令通知文件系统将缓存刷新到磁盘,而让Filesystem自行决定什么时候来做同步,这个是性能最好的。

sync_binlog=n,在进行n次事务提交以后,Mysql将执行一次fsync之类的磁盘同步指令,同志文件系统将Binlog文件缓存刷新到磁盘。

Mysql中默认的设置是sync_binlog=0,即不作任何强制性的磁盘刷新指令,这时性能是最好的,但风险也是最大的。一旦系统绷Crash,在文件系统缓存中的所有Binlog信息都会丢失

 

四、mysql清除binlog的方法

 

1、手工删除binlog

用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件

格式

PURGE {MASTER | BINARY} LOGS TO ‘log_name’
PURGE {MASTER | BINARY} LOGS BEFORE ‘date’

例如

 

  • mysql> reset master; //删除master的binlog
    mysql> reset slave; //删除slave的中继日志
    mysql> purge master logs before '2012-03-30 17:20:00'; //删除指定日期以前的日志索引中binlog日志文件
    mysql> purge master logs to 'binlog.000002'; //删除指定日志文件的日志索引中binlog日志文件
    或者直接用操作系统命令直接删除
    
    PURGE MASTER LOGS TO ‘mysql-bin.010′;
    PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
    
    		
  •  

    2、设置日志保留时长expire_logs_days自动删除
     

    查看当前日志保存天数:

    show variables like ‘%expire_logs_days%’;

    这个默认是0,也就是logs不过期,可通过设置全局的参数,使他临时生效:

    set global expire_logs_days=7;

    设置了只保留7天BINLOG, 下次重启mysql这个参数默认会失败,所以需在my.cnf中设置

    expire_logs_days = 7

     

    3、mysql事件调度器定时删除binlog

    事件调度器(Event Scheduler),可以用做定时执行某些特定任务,来取代原先只能由操作系统的计划任务来执行的工作MySQL的事件调度器可以精确到每秒钟执行一个任务,对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。

    先查看是否启动这个功能:

    SELECT @@event_scheduler;

    在使用这个功能之前必须确保 event_scheduler已开启,可执行:
     

    SET GLOBAL event_scheduler = 1;

    或我们可以在配置my.cnf文件 中加上event_scheduler = 1


    然后来对 binlog 的删除写一个事件.设置天检查,并删除每 4 天前的 binlog 文件.
     

    CREATE EVENT purge_binlog ON SCHEDULE EVERY 1 DAY DO PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 4 DAY);

    查看定时事件可以,通过执行如下的语句
     

    SELECT * FROM information_schema.EVENTS;

    可以看到相应的库中的作业信息,其中LAST_EXECUTED字段会反映出相应的作业最近一次的执行时间

     

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐