教你删除MYSQl的BIN-LOG日志

发布时间:2020-12-29编辑:脚本学堂
今天突然发现var下面有很多mysql-bin-*****的文件,每个文件还比较大。这是mysql的bin-log日志。

今天突然发现var下面有很多mysql-bin-*****的文件,每个文件还比较大。这是mysql的bin-log日志。

1.查找有那些二进制日志
mysql> show binary logs;

 Log_name         | File_size  |
+------------------+------------+
| mysql-bin.000001 | 1073799753 |
| mysql-bin.000002 | 1073990602 |
| mysql-bin.000003 | 1074106949 |
| mysql-bin.000004 | 1074106949 |
| mysql-bin.000005 | 1074107869 |
| mysql-bin.000006 | 1074196212 |
| mysql-bin.000007 | 1074105415 |
| mysql-bin.000008 | 1074105415 |
| mysql-bin.000009 | 1074105415 |
| mysql-bin.000010 | 1074105415 |
| mysql-bin.000011 | 1074105415 |
| mysql-bin.000012 |   74678481 |
| mysql-bin.000013 | 1073800614 |
| mysql-bin.000014 | 1073898150 |
| mysql-bin.000015 | 1074106949 |
| mysql-bin.000016 |  961006620 |
| mysql-bin.000017 |        918 |
| mysql-bin.000018 |        125 |
| mysql-bin.000019 |        125 |
| mysql-bin.000020 |        125 |
| mysql-bin.000021 |        125 |
| mysql-bin.000022 |        106 |
| mysql-bin.000024 |        125 |
+------------------+------------+

2.删除bin-log(删除mysql-bin.000024 之前的而没有包含mysql-bin.000024 )
mysql> purge binary logs to mysql-bin.000024 ;
Query OK, 0 rows affected (0.16 sec)

3.  查询结果(现在只有一条记录了.)
mysql> show binlog eventsG

mysql> show binlog  eventsG;
*************************** 1. row ***************************
   Log_name: mysql-bin.000024
        Pos: 4
 Event_type: Format_desc
  Server_id: 1
End_log_pos: 106
       Info: Server ver: 5.1.36-log, Binlog ver: 4
*************************** 2. row ***************************
   Log_name: mysql-bin.000024
        Pos: 106
 Event_type: Stop
  Server_id: 1
End_log_pos: 125
       Info:

mysql> show binary logs;

+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000024 |       125 |
+------------------+-----------+
1 row in set (0.00 sec)

(删除的其它格式运用!)
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'
用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。

例如:
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00';
清除3天前的 binlog
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
BEFORE变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。MASTER和BINARY是同义词。

如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。

要清理日志,需按照以下步骤:
  1. 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
  2. 使用SHOW MASTER LOGS获得主服务器上的一系列日志。
  3. 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的,这是清单上的最后一个日志。
  4. 制作您将要删除的所有日志的备份。(这个步骤是自选的,但是建议采用。)
  5. 清理所有的日志,但是不包括目标日志。

其实在my.cnf中有两个参数可以控制bin-log的。

expire_logs_days
二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。

SQL_LOG_BIN
可以定义你此时的session的语句是否记录倒binlog中。关掉的话貌似可以提高1%的性能。

bin-log中记录的是mysql的所有的操作信息,在还原是很有用,可以恢复到最近时间点。删除MYSQl BIN-LOG 日志 - horse - Horse数据库坏了,误操作了,有日志还有的救,没日志又没备份,那就玩完了。