`
wayne173
  • 浏览: 358626 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

删除binlog的方法

 
阅读更多

不知道你有没有为mysql的binlog占用大量磁盘感到无奈,my.cnf里binlog的size可以设置多大做分割,但没有看到删除的配置,在mysql里show了一下variables,
mysql> show variables like '%log%';
查到了
| expire_logs_days | 0 |
这个默认是0,也就是logs不过期,这个是一个global的参数,所以需要执行
set global expire_logs_days=10; 这个值可以参考你的相邻两个binlog文件的日期。
这样10天前的log就会被删除了,如果有恢复的需要,请做好备份工作,但这样重启mysql配置又恢复默认了,所以需在my.cnf中设置

expire_logs_days = 10

另外还有一种手动的删除binlog的方法,转自http://www.ourmysql.com/archives/293
想要恢愎数据库以前的资料,执行:show binlog events;
由于数据量很多,查看起来很麻烦,光打开个文件就要闪半天,所以应该适当删除部分可不用的日志。
并且如果使用的时间足够长的话,会把我的硬盘空间都给吃掉
1.登录系统,/usr/bin/mysql
使用mysql查看日志
mysql> show binary logs;
+—————-+———–+
| Log_name | File_size |
+—————-+———–+
| ablelee.000001 | 150462942 |
| ablelee.000002 | 120332942 |
| ablelee.000003 | 141462942 |
+—————-+———–+
2.删除bin-log(删除ablelee.000003之前的而没有包含ablelee.000003)
mysql> purge binary logs to ‘ablelee.000003′;
Query OK, 0 rows affected (0.16 sec)
3. 查询结果(现在只有一条记录了.)
mysql> show binlog events\G
*************************** 1. row ***************************
Log_name: ablelee.000003
Pos: 4
Event_type: Format_desc
Server_id: 1
End_log_pos: 106
Info: Server ver: 5.1.26-rc-log, Binlog ver: 4
1 row in set (0.01 sec)
(ablelee.000001和ablelee.000002已被删除)
mysql> show binary logs;
+—————-+———–+
| Log_name | File_size |
+—————-+———–+
| ablelee.000003 | 106 |
+—————-+———–+
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. 清理所有的日志,但是不包括目标日志。

下面讲一下怎么从二进制文件恢复数据, 假如不小心执行了drop table xxx_db, 假如你保留了完整的二进制日志的话, 先不要冒汗, 这是可以恢复的.
先看看日志
>mysqlbinlog /diskb/bin-logs/xxx_db-bin.000001

找到执行create table xxx_db之后和drop table xxx_db之前的position, 假如是20, 1000.
>mysqlbinlog --start-position="4" --stop-position="1000" /diskb/bin-logs/xxx_db-bin.000001 | mysql -u root

伴随着一大堆的ERROR 1062 (23000) at line 12355: Duplicate entry '139' for key 1, 数据库就这样恢复了, 不过--start-position="20"是不行的, 必须从--start-position="4"开始, 为什么要强制从4开始, 这个问题我也暂时没有搞清楚.+
还有一种办法是根据日期来恢复
>mysqlbinlog --start-datetime="2009-09-14 0:20:00" --stop-datetim="2009-09-15 01:25:00" /diskb/bin-logs/xxx_db-bin.000001 | mysql -u root

如果create table xxx_db和drop table xxx_db之间的时间相距是一年, 或者在不同的二进制日志中, 且位置相距好远, 就等着失眠吧! 做好备份, 小心操作才是正路啊...
如果MySQL服务器上有多个要执行的二进制日志,安全的方法是在一个连接中处理它们。下面是一个说明什么是不安全的例子:
shell> mysqlbinlog hostname-bin.000001 | mysql # DANGER!!shell> mysqlbinlog hostname-bin.000002 | mysql # DANGER!!使用与服务器的不同连接来处理二进制日志时,如果第1个日志文件包含一个CREATE TEMPORARY TABLE语句,第2个日志包含一个使用该临时表的语句,则会造成问题。当第1个mysql进程结束时,服务器撤销临时表。当第2个mysql进程想使用该表时,服务器报告 “不知道该表”。
要想避免此类问题,使用一个连接来执行想要处理的所有二进制日志中的内容。下面提供了一种方法:
shell> mysqlbinlog hostname-bin.000001 hostname-bin.000002 | mysql另一个方法是:
shell> mysqlbinlog hostname-bin.000001 > /tmp/statements.sqlshell> mysqlbinlog hostname-bin.000002 >> /tmp/statements.sqlshell> mysql -e "source /tmp/statements.sql"

分享到:
评论

相关推荐

    使用binlog日志恢复MySQL数据库删除数据的方法

    本文主要通过实际操作说明对binlog日志恢复MySQL数据库删除数据的方法进行说明,内容主要包括MySQL数据库binlog日志查询、恢复等相关介绍,希望对大家在工作及生活中遇到的此类问题有所帮助,如需操作指导,可留言!

    mysql手动删除BINLOG的方法

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

    binlog2sql-master.zip

    通过binlog2sql这个工具可以将binlog的日志反解析成insert语句,这样就可以恢复你不小心删除的数据了

    MySQL 自动清理binlog日志的方法

    主要介绍了MySQL 自动清理binlog日志的方法,需要的朋友可以参考下

    mysql 正确清理binlog日志的两种方法

    MySQL中的binlog日志记录了数据库中数据的变动,便于对数据的基于时间点和基于位置的恢复,但是binlog也会日渐增大,占用很大的磁盘空间,因此,要对binlog使用正确安全的方法清理掉一部分没用的日志。 【方法一】...

    MySQL利用binlog恢复库表

    利用binlog恢复库表,要求如下: 1. 启用binlog日志 2. 创建db1库tb1表,插入3条记录 3. 删除tb1表中刚插入的3条记录 4. 使用mysqlbinlog恢复删除的3条记录

    MySQL的redo log、undo log、binlog

    文章目录一、MySQL日志文件类型二、几种日志的对比2-1、用途 redo log undo log binlog2-2、存储内容、格式 redo log undo log binlog2-3、日志生成 redo log undo log binlog2-4、删除策略 redo log ...

    MySQL 两种恢复数据的方法

    前一段时间接二连三的出现开发人员在测试环境和生产误操作导致数据库误删除/更新,对DBA而言,回滚数据着实是一件头疼的事情,凡涉及到恢复线上数据必然对应用带来一定的影响。大多数情况是开发误操作delete数据,...

    wing-binlog-go:基于MySQL数据库binlog的分布式增量订阅和消费

    它允许您接收事件,例如使用原始数据进行插入,更新和删除。 wing-binlog-go是一种高性能的Mysql / MariaDB中间件 wing-binlog-go是一个轻量级的Mysql / MariaDB数据监视系统 wing-binlog-go可以在OSX,Linux和...

    使用mysql事件调度器定时删除binlog

    MySQL的事件调度器可以精确到每秒钟执行一...或我们可以在配置my.cnf文件 中加上event_scheduler = 1然后来对 binlog 的删除写一个事件.设置天检查,并删除每 4 天前的 binlog 文件. 代码如下:CREATE EVENT purge_binlog

    Mysql数据库清理binlog日志命令详解

    今天主要分享下mysql数据库应该如何正确的删除binlog日志,这里要注意不要强制使用rm命令进行清除。否则mysq-bin.index错乱,最终导致后期expire-log-days配置项失效。 1、查看binlog日志 mysql> show binary logs;...

    spark-binlog:一个用于使用Apache Spark结构流查询Binlog的库,用于Spark SQL,DataFrames和[MLSQL](https

    MySQL Binlog: groupId: tech.mlsqlartifactId: mysql-binlog_2.11version: 1.0.4HBase WAL: groupId: tech.mlsqlartifactId: hbase-wal_2.11version: 1.0.4局限性mysql-binlog仅支持插入/更新/删除事件。...

    Mysql数据库监听binlog的开启步骤

    类似于这种功能,当然可以在业务逻辑层实现,在收到用户的删除请求之后执行这一操作,但是数据库的binlog为我们提供了另外一种操作方法. 要监听binlog,需要两步,第一步当然是你的mysql需要开启这一个功能,第二个是要写...

    监听mysql表内容变化 mysql开启binlog

    binlog 就是binary log,二进制日志文件,这个文件记录了mysql所有的增、删、改语句。通过binlog日志我们可以做数据恢复,做主从复制等等。可以看到,只要有了这个binlog,我们就拥有了mysql的完整备份了。 我们时常...

    mysql 逆向解析mysqlbinlog成sql工具,可以解析5.7json字段,批量执行

    先私信后购买,解析binlog利器,回滚恢复误删除数据

    MySQL使用mysqldump+binlog完整恢复被删除的数据库原理解析

    主要介绍了MySQL使用mysqldump+binlog完整恢复被删除的数据库,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    Mysql的Binlog数据恢复:不小心删除数据库详解

    Mysql的Bin log数据恢复:不小心删除数据库 前言:因为不小心删除了测试机器上Mysql的一整个数据库Schema,因为是测试机所以...1、打开mysql的binlog功能 mysql是支持增量备份,但要打开mysql的bin log功能。 修改mys

    mysql删除日志方法.docx

    mysql的LOG日志占用空间如果比较大的话,需要进行清理,整理了日志清理的四种方法,方便大家安全清理日志

    Mysql中Binlog3种格式的介绍与分析

    (相比row能节约多少性能与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条件的update操作,以及整表删除,alter表等操作,ROW...

Global site tag (gtag.js) - Google Analytics