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
相关推荐
MySQL二进制日志(Binary Log,简称binlog)是MySQL数据库系统中记录所有更改数据库数据的事件序列的重要工具,主要用于数据恢复、主从复制等场景。本篇将深入探讨如何利用Python语言来解析和转换MySQL的binlog,...
2. **下载二进制日志文件**:使用MySQL客户端工具(如`mysqlbinlog`)下载所需的二进制日志到本地。例如,`mysqlbinlog --no-defaults --raw --start-position=LOG_POS LOG_FILE > binlog_file_name`。 3. **解析二...
4.2 增量备份:在全量备份基础上,定期使用mysqlbinlog提取并保存自上次备份以来的二进制日志。 4.3 混合备份:结合全量和增量,实现高效且节省存储空间的备份方案。 五、恢复流程 5.1 确定恢复点:根据业务需求或...
不同版本的MySQL可能有不同的二进制日志格式,使用mysqlbinlog时要注意兼容性问题。 8. **优化性能**: 可以通过调整`expire_logs_days`参数限制二进制日志的保留时间,以节省存储空间。 9. **其他工具集成**: ...
这样做使得`mysqlbinlog`工具成为phpStudy环境中的一部分,从而能够方便地使用该工具来处理数据库的二进制日志。 二进制日志是MySQL中记录所有改变数据的SQL语句的一种方式,它记录了数据库的所有更改操作,但不...
- **mysqlbinlog:** 一个用于提取和转换二进制日志文件内容的工具。可以通过命令 `mysqlbinlog [options] binlogFile > newfile` 来使用它,例如:`D:\mysql\log> mysqlbinlog binlog.000001 > 1.txt`。 #### 常见...
`mysqlbinlog`命令用于查看和提取二进制日志内容,例如用于恢复特定时间点的数据。 普通查询日志记录所有的SQL查询,但由于其对系统性能的影响,通常在生产环境中不启用。慢查询日志则记录执行时间超过一定阈值的...
这通常通过`mysqlbinlog`工具完成,它可以从二进制日志中提取SQL语句并将其应用到数据库。如果需要恢复到特定时间点,可以使用`pt-rewind`或`mysqlpump --skip-trx-history`等工具。 5. 事故恢复策略 - 系统崩溃:...
6. **如何使用日志进行数据恢复**:演示如何通过二进制日志进行数据恢复,可能包括使用`mysqlbinlog`工具提取日志,并用`mysql`客户端执行来恢复数据。 7. **日志的性能影响**:讨论开启不同日志类型对系统性能的...
首先,使用`.sql`备份文件重载数据,接着,根据备份文件中的二进制日志位置信息,找到对应的二进制日志文件,使用`mysqlbinlog`工具提取自全量备份后发生更改的SQL语句,并应用到数据库中。如果有多次增量备份,需按...
MySQLbinlog flashback 是一个开源工具,它主要用于从MySQL的二进制日志(binary log)中提取出可以执行的回滚SQL语句,以便在不影响线上服务的情况下进行数据恢复或故障排查。这个工具的核心功能是对MySQL binlog...
启用二进制日志功能,需要在MySQL服务器的选项文件(如/etc/my.cnf或C:\my.ini)的[mysqld]组中添加一行配置,例如:`log-bin=/var/log/mysql/bin.1og`。路径根据实际文件系统和用户设置调整,并创建对应的目录用于...
根据mysql数据日志文件,自动生成对应的建表sql和数据恢复sql,可以对数据名和表明进行过滤。适用于设置为完整日志格式下的mysql数据库还原,包括误操作数据、数据库崩溃等多种情况下的数据库... "二进制日志文件路径
为了更好地监控数据库的状态并及时解决潜在问题,MySQL提供了多种类型的日志文件,其中包括错误日志、二进制日志、查询日志和慢查询日志。本文将详细介绍这四种日志的作用及其应用场景。 #### 二、错误日志(Error ...
`mysqlbinlog`是MySQL提供的一款命令行工具,用于读取、显示和处理二进制日志。它可以用于数据库备份、复制和故障恢复等多种场景。 **3. 数据库恢复流程** 恢复过程通常分为以下步骤: - **获取binlog文件**:首先...
标题中的“Go-一个应用它提取MySQLbinlog解析binlog并将增量更新数据推送到不同的接收器”揭示了一个基于Go语言的工具,其主要功能是处理MySQL的二进制日志(binlog)。这个工具能够监听MySQL服务器的binlog事件,...
`mysqlbinlog`工具是与MySQL数据库配套的命令行实用程序,用于读取和解析这些二进制日志文件,以便于理解和操作其中的数据。 1. **MySQL binlog的用途** - **数据恢复**:当你不小心执行了错误的SQL语句导致数据...
3. 使用mysqlbinlog工具解析二进制日志,提取出需要的更改操作。 4. 将这些更改应用到一个新备份文件中,形成增量备份。 5. 同样,备份完成后,将文件保存并进行必要的权限和压缩处理。 在Linux环境中,可以利用...