`

[转]使用mysqlbinlog提取二进制日志

阅读更多

MySQL binlog日志记录了MySQL数据库从启用日志以来所有对当前数据库的变更。binlog日志属于二进制文件,我们可以从binlog提取出来生成可阅读的SQL语句来重建当前数据库以及根据需要实现时点恢复或不完全恢复。本文主要描述了如果提取binlog日志,并给出相关示例。

有关binlog的介绍与描述请参考:MySQL 二进制日志(Binary Log)  http://www.linuxidc.com/Linux/2014-10/107664.htm

1、提取mysqlbinlog的几种方式

a、使用show binlog events方式可以获取当前以及指定binlog的日志,不适宜提取大量日志。

b、使用mysqlbinlog命令行提取(适宜批量提取日志)。

2、演示show binlog events方式

mysql> show variables like 'version';
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| version      | 5.6.12-log |
+---------------+------------+

mysql> show binary logs;
+-----------------+-----------+
| Log_name        | File_size |
+-----------------+-----------+
| APP01bin.000001 |      120 |
+-----------------+-----------+

a、只查看第一个binlog文件的内容(show binlog events) 
mysql> use replication;
Database changed
mysql> select * from tb;
+------+-------+
| id  | val  |
+------+-------+
|    1 | robin |
+------+-------+

mysql> insert into tb values(2,'jack');
Query OK, 1 row affected (0.02 sec)

mysql> flush logs;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into tb values(3,'fred');
Query OK, 1 row affected (0.00 sec)

mysql> show binary logs;
+-----------------+-----------+
| Log_name        | File_size |
+-----------------+-----------+
| APP01bin.000001 |      409 |
| APP01bin.000002 |      363 |
+-----------------+-----------+

mysql> show binlog events;
+-----------------+-----+-------------+-----------+-------------+----------------------------------------------------+
| Log_name        | Pos | Event_type  | Server_id | End_log_pos | Info                                              |
+-----------------+-----+-------------+-----------+-------------+----------------------------------------------------+
| APP01bin.000001 |  4 | Format_desc |        11 |        120 | Server ver: 5.6.12-log, Binlog ver: 4              |
| APP01bin.000001 | 120 | Query      |        11 |        213 | BEGIN                                              |
| APP01bin.000001 | 213 | Query      |        11 |        332 | use `replication`; insert into tb values(2,'jack') |
| APP01bin.000001 | 332 | Xid        |        11 |        363 | COMMIT /* xid=382 */                              |
| APP01bin.000001 | 363 | Rotate      |        11 |        409 | APP01bin.000002;pos=4                              |
+-----------------+-----+-------------+-----------+-------------+----------------------------------------------------+
-- 在上面的结果中第3行可以看到我们执行的SQL语句,第4行为自动提交
-- Author : Leshami
-- Blog  : http://blog.csdn.net/leshami

b、查看指定binlog文件的内容(show binlog events in 'binname.xxxxx')
mysql> show binlog events in 'APP01bin.000002';
+-----------------+-----+-------------+-----------+-------------+----------------------------------------------------+
| Log_name        | Pos | Event_type  | Server_id | End_log_pos | Info                                              |
+-----------------+-----+-------------+-----------+-------------+----------------------------------------------------+
| APP01bin.000002 |  4 | Format_desc |        11 |        120 | Server ver: 5.6.12-log, Binlog ver: 4              |
| APP01bin.000002 | 120 | Query      |        11 |        213 | BEGIN                                              |
| APP01bin.000002 | 213 | Query      |        11 |        332 | use `replication`; insert into tb values(3,'fred') |
| APP01bin.000002 | 332 | Xid        |        11 |        363 | COMMIT /* xid=394 */                              |
+-----------------+-----+-------------+-----------+-------------+----------------------------------------------------+

c、查看当前正在写入的binlog文件(show master status\G) 
mysql> show master status\G
*************************** 1. row ***************************
            File: APP01bin.000002
        Position: 363
    Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

d、获取指定位置binlog的内容(show binlog events from) 
mysql> show binlog events from 213;
+-----------------+-----+------------+-----------+-------------+----------------------------------------------------+
| Log_name        | Pos | Event_type | Server_id | End_log_pos | Info                                              |
+-----------------+-----+------------+-----------+-------------+----------------------------------------------------+
| APP01bin.000001 | 213 | Query      |        11 |        332 | use `replication`; insert into tb values(2,'jack') |
| APP01bin.000001 | 332 | Xid        |        11 |        363 | COMMIT /* xid=382 */                              |
| APP01bin.000001 | 363 | Rotate    |        11 |        409 | APP01bin.000002;pos=4                              |
+-----------------+-----+------------+-----------+-------------+----------------------------------------------------+

3、演示mysqlbinlog方式提取binlog

a、提取指定的binlog日志
# mysqlbinlog /opt/data/APP01bin.000001
# mysqlbinlog /opt/data/APP01bin.000001|grep insert
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
insert into tb values(2,'jack')

b、提取指定position位置的binlog日志
# mysqlbinlog --start-position="120" --stop-position="332" /opt/data/APP01bin.000001

c、提取指定position位置的binlog日志并输出到压缩文件
# mysqlbinlog --start-position="120" --stop-position="332" /opt/data/APP01bin.000001 |gzip >extra_01.sql.gz

d、提取指定position位置的binlog日志导入数据库
# mysqlbinlog --start-position="120" --stop-position="332" /opt/data/APP01bin.000001 | mysql -uroot -p

e、提取指定开始时间的binlog并输出到日志文件
# mysqlbinlog --start-datetime="2014-12-15 20:15:23" /opt/data/APP01bin.000002 --result-file=extra02.sql

f、提取指定位置的多个binlog日志文件
# mysqlbinlog --start-position="120" --stop-position="332" /opt/data/APP01bin.000001 /opt/data/APP01bin.000002|more

g、提取指定数据库binlog并转换字符集到UTF8
# mysqlbinlog --database=test --set-charset=utf8 /opt/data/APP01bin.000001 /opt/data/APP01bin.000002 >test.sql

h、远程提取日志,指定结束时间 
# mysqlbinlog -urobin -p -h192.168.1.116 -P3306 --stop-datetime="2014-12-15 20:30:23" --read-from-remote-server mysql-bin.000033 |more

i、远程提取使用row格式的binlog日志并输出到本地文件
# mysqlbinlog -urobin -p -P3606 -h192.168.1.177 --read-from-remote-server -vv inst3606bin.000005 >row.sql

4、获取mysqlbinlog的帮助信息(仅列出常用选项)
-?, --help
  显示帮助消息并退出。

-d, --database=name
  只列出该数据库的条目(只适用本地日志)。

-f, --force-read
  使用该选项,如果mysqlbinlog读它不能识别的二进制日志事件,它会打印警告,忽略该事件并继续。没有该选项,如果mysqlbinlog读到此类事件则停止。

-h, --host=name
  获取给定主机上的MySQL服务器的二进制日志。

-l, --local-load=name
  为指定目录中的LOAD DATA INFILE预处理本地临时文件。

-o, --offset=# 
  跳过前N个条目。

-p, --password[=name]
  当连接服务器时使用的密码。如果使用短选项形式(-p),选项和密码之间不能有空格。 
  如果在命令行中–password或-p选项后面没有密码值,则提示输入一个密码。

-P, --port=# 
  用于连接远程服务器的TCP/IP端口号。

--protocol=name
  使用的连接协议。

-R, --read-from-remote-server|--read-from-remote-master=name
  从MySQL服务器读二进制日志。如果未给出该选项,任何连接参数选项将被忽略,即连接到本地。
  这些选项是–host、–password、–port、–protocol、–socket和–user。

-r, --result-file=name 
  将输出指向给定的文件。

-s, --short-form
  只显示日志中包含的语句,不显示其它信息,该方式可以缩小生成sql文件的尺寸。

-S, --socket=name
  用于连接的套接字文件。

--start-datetime=name
  从二进制日志中读取等于或晚于datetime参量的事件,datetime值相对于运行mysqlbinlog的机器上的本地时区。
  该值格式应符合DATETIME或TIMESTAMP数据类型。例如:2004-12-25 11:25:56 ,建议使用引号标识。

--stop-datetime=name
  从二进制日志中读取小于或等于datetime的所有日志事件。关于datetime值的描述参见--start-datetime选项。

-j, --start-position=# 
  从二进制日志中第1个位置等于N参量时的事件开始读。

--stop-position=#
  从二进制日志中第1个位置等于和大于N参量时的事件起停止读。

--server-id=#  
  仅仅提取指定server_id的binlog日志

--set-charset=name 
  添加SET NAMES character_set到输出      
                
-t, --to-last-log 
  在MySQL服务器中请求的二进制日志的结尾处不停止,而是继续打印直到最后一个二进制日志的结尾。
  如果将输出发送给同一台MySQL服务器,会导致无限循环。该选项要求–read-from-remote-server。

-D, --disable-log-bin
  禁用二进制日志。如果使用–to-last-logs选项将输出发送给同一台MySQL服务器,可以避免无限循环。
  该选项在崩溃恢复时也很有用,可以避免复制已经记录的语句。注释:该选项要求有SUPER权限。

-u, --user=name
  连接远程服务器时使用的MySQL用户名。

-v, --verbose
  用于输出基于row模式的binlog日志,-vv为列数据类型添加注释

-V, --version
  显示版本信息并退出。

5、小结
a、可以通过show binlog events以及mysqlbinlog方式来提取binlog日志。
b、show binlog events 参数有限不适宜批量提取,mysqlbinlog可用于批量提取来建立恢复数据库的SQL。
c、mysqlbinlog可以基于时间点,position等方式实现不完全恢复或时点恢复。
d、mysqlbinlog可以从支持本地或远程方式提取binlog日志。
e、mysqlbinlog可以基于server_id,以及基于数据库级别提取日志,不支持表级别。

使用mysqlbinlog工具进行基于位置或时间点的恢复  http://www.linuxidc.com/Linux/2014-07/104676.htm

分享到:
评论

相关推荐

    基于Python实现用于解析和转换 MySQL 二进制日志(binlog)的工具源码

    MySQL二进制日志(Binary Log,简称binlog)是MySQL数据库系统中记录所有更改数据库数据的事件序列的重要工具,主要用于数据恢复、主从复制等场景。本篇将深入探讨如何利用Python语言来解析和转换MySQL的binlog,...

    从MySQL ROW二进制日志还原更新。Undelete-Mysql.zip

    2. **下载二进制日志文件**:使用MySQL客户端工具(如`mysqlbinlog`)下载所需的二进制日志到本地。例如,`mysqlbinlog --no-defaults --raw --start-position=LOG_POS LOG_FILE > binlog_file_name`。 3. **解析二...

    mysqlbinlog.exe

    4.2 增量备份:在全量备份基础上,定期使用mysqlbinlog提取并保存自上次备份以来的二进制日志。 4.3 混合备份:结合全量和增量,实现高效且节省存储空间的备份方案。 五、恢复流程 5.1 确定恢复点:根据业务需求或...

    mysqlbinlog

    不同版本的MySQL可能有不同的二进制日志格式,使用mysqlbinlog时要注意兼容性问题。 8. **优化性能**: 可以通过调整`expire_logs_days`参数限制二进制日志的保留时间,以节省存储空间。 9. **其他工具集成**: ...

    mysqlbinlog.exe文件,win 7mysql 5.6下可用

    这样做使得`mysqlbinlog`工具成为phpStudy环境中的一部分,从而能够方便地使用该工具来处理数据库的二进制日志。 二进制日志是MySQL中记录所有改变数据的SQL语句的一种方式,它记录了数据库的所有更改操作,但不...

    mysql binlog二进制日志详解

    - **mysqlbinlog:** 一个用于提取和转换二进制日志文件内容的工具。可以通过命令 `mysqlbinlog [options] binlogFile > newfile` 来使用它,例如:`D:\mysql\log> mysqlbinlog binlog.000001 > 1.txt`。 #### 常见...

    mysql 日志备份恢复2

    `mysqlbinlog`命令用于查看和提取二进制日志内容,例如用于恢复特定时间点的数据。 普通查询日志记录所有的SQL查询,但由于其对系统性能的影响,通常在生产环境中不启用。慢查询日志则记录执行时间超过一定阈值的...

    MySQL日志和数据恢复

    这通常通过`mysqlbinlog`工具完成,它可以从二进制日志中提取SQL语句并将其应用到数据库。如果需要恢复到特定时间点,可以使用`pt-rewind`或`mysqlpump --skip-trx-history`等工具。 5. 事故恢复策略 - 系统崩溃:...

    MySQL数据库应用案例视频教程下载第15讲 MySQL日志.zip

    6. **如何使用日志进行数据恢复**:演示如何通过二进制日志进行数据恢复,可能包括使用`mysqlbinlog`工具提取日志,并用`mysql`客户端执行来恢复数据。 7. **日志的性能影响**:讨论开启不同日志类型对系统性能的...

    mysql增量备份及恢复

    首先,使用`.sql`备份文件重载数据,接着,根据备份文件中的二进制日志位置信息,找到对应的二进制日志文件,使用`mysqlbinlog`工具提取自全量备份后发生更改的SQL语句,并应用到数据库中。如果有多次增量备份,需按...

    mysqlbinlog_flashback, 产生在线mysqlbinlog的回滚的sql.zip

    MySQLbinlog flashback 是一个开源工具,它主要用于从MySQL的二进制日志(binary log)中提取出可以执行的回滚SQL语句,以便在不影响线上服务的情况下进行数据恢复或故障排查。这个工具的核心功能是对MySQL binlog...

    实时恢复MySQL数据.pdf

    启用二进制日志功能,需要在MySQL服务器的选项文件(如/etc/my.cnf或C:\my.ini)的[mysqld]组中添加一行配置,例如:`log-bin=/var/log/mysql/bin.1og`。路径根据实际文件系统和用户设置调整,并创建对应的目录用于...

    免费mysql数据恢复工具

    根据mysql数据日志文件,自动生成对应的建表sql和数据恢复sql,可以对数据名和表明进行过滤。适用于设置为完整日志格式下的mysql数据库还原,包括误操作数据、数据库崩溃等多种情况下的数据库... "二进制日志文件路径

    MySQL日志分析(包括工具)

    为了更好地监控数据库的状态并及时解决潜在问题,MySQL提供了多种类型的日志文件,其中包括错误日志、二进制日志、查询日志和慢查询日志。本文将详细介绍这四种日志的作用及其应用场景。 #### 二、错误日志(Error ...

    mysqlbinlog DOC

    `mysqlbinlog`是MySQL提供的一款命令行工具,用于读取、显示和处理二进制日志。它可以用于数据库备份、复制和故障恢复等多种场景。 **3. 数据库恢复流程** 恢复过程通常分为以下步骤: - **获取binlog文件**:首先...

    Go-一个应用它提取MySQLbinlog解析binlog并将增量更新数据推送到不同的接收器

    标题中的“Go-一个应用它提取MySQLbinlog解析binlog并将增量更新数据推送到不同的接收器”揭示了一个基于Go语言的工具,其主要功能是处理MySQL的二进制日志(binlog)。这个工具能够监听MySQL服务器的binlog事件,...

    mysqlbinlog.zip

    `mysqlbinlog`工具是与MySQL数据库配套的命令行实用程序,用于读取和解析这些二进制日志文件,以便于理解和操作其中的数据。 1. **MySQL binlog的用途** - **数据恢复**:当你不小心执行了错误的SQL语句导致数据...

    backup.sh.7z

    3. 使用mysqlbinlog工具解析二进制日志,提取出需要的更改操作。 4. 将这些更改应用到一个新备份文件中,形成增量备份。 5. 同样,备份完成后,将文件保存并进行必要的权限和压缩处理。 在Linux环境中,可以利用...

Global site tag (gtag.js) - Google Analytics