有关mysqlbinlog命令提取mysql二进制日志的方法,提取mysqlbinlog的几种方式,使用show binlog events方式可以获取当前以及指定binlog的日志,使用mysqlbinlog命令行提取。 mysql binlog日志记录了mysql数据库从启用日志以来所有对当前数据库的变更。 binlog日志属于二进制文件(mysql二进制日志),可以从binlog提取出来生成可阅读的SQL语句来重建当前数据库以及根据需要实现时点恢复或不完全恢复。 这里重点介绍如果提取binlog日志,并给出相关示例。
1、提取mysqlbinlog的几种方式
mysql> show variables like 'version';
+---------------+------------+ | Variable_name | Value | +---------------+------------+ | version | 5.6.12-log | +---------------+------------+ mysql> show binary logs; +-----------------+-----------+ | Log_name | File_size | +-----------------+-----------+ | APP01bin.000001 | 120 | +-----------------+-----------+
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行为自动提交
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 */ | +-----------------+-----+-------------+-----------+-------------+----------------------------------------------------+
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
# 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')
# 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
# mysqlbinlog --start-position="120" --stop-position="332" /opt/data/APP01bin.000001 | mysql -uroot -p
# mysqlbinlog --start-datetime="2014-12-15 20:15:23" /opt/data/APP01bin.000002 --result-file=extra02.sql
# mysqlbinlog --start-position="120" --stop-position="332" /opt/data/APP01bin.000001 /opt/data/APP01bin.000002|more
# mysqlbinlog --database=test --set-charset=utf8 /opt/data/APP01bin.000001 /opt/data/APP01bin.000002 >test.sql
# mysqlbinlog -urobin -p -h192.168.1.116 -P3306 --stop-datetime="2014-12-15 20:30:23" --read-from-remote-server mysql-bin.000033 |more
# mysqlbinlog -urobin -p -P3606 -h192.168.1.177 --read-from-remote-server -vv inst3606bin.000005 >row.sql
4、获取mysqlbinlog的帮助信息(仅列出常用选项)
-o, --offset=#
--stop-position=# (责任编辑:IT) |