09 MYSQL 二进制日志的分析和使用
说明:如下操作只包含简单的binglog相关的操作,目的是方便快速对binlog 进行操作,详细的介绍和说明请参见:
常用的操作:
1.查看当前的二进制位置:
show master logs;
2.使用命令flush logs切换二进制日志,如下所示:
flush logs;
3.二进制日志的删除可以通过命令手工删除,也可以设置自动清理。下面简单介绍一下,如何删除二进制日志。
purge binary logs to 'mysqlbin.000002';
以上命令可以删除mysqlbin.000002以前的日志。
清除某个时间点以前的二进制日志文件。
mysql> purge binary logs before '2017-03-10 10:10:00'; Query OK, 0 rows affected (0.00 sec)
清除7天前的二进制日志文件
mysql> purge master logs before date_sub( now( ), interval 7 day); Query OK, 0 rows affected (0.00 sec)
清除所有的二进制日志文件(当前不存在主从复制关系)
reset master; 设置expire_logs_days参数,设置自动清理,其默认值为0,表示不启用过期自动删除功能 mysql> show variables like 'expire_logs_days';
一、对于较小的二进制日志文件,我们可以直接使用如下方式查看:
mysql> show binlog events in 'mysql-bin.000025'; +------------------+-----+-------------+-----------+-------------+---------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+-------------+-----------+-------------+---------------------------------------+ | mysql-bin.000025 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.31-log, Binlog ver: 4 | | mysql-bin.000025 | 120 | Query | 1 | 188 | BEGIN | | mysql-bin.000025 | 188 | Table_map | 1 | 236 | table_id: 79 (test.t1) | | mysql-bin.000025 | 236 | Write_rows | 1 | 278 | table_id: 79 flags: STMT_END_F | | mysql-bin.000025 | 278 | Xid | 1 | 309 | COMMIT /* xid=175 */ | +------------------+-----+-------------+-----------+-------------+---------------------------------------+
二、指定查看的二进制的起始位点信息:
mysqlbinlog -vv /var/lib/mysql/mysql-bin.000003 --start-position=475;
三、将二进制日志内容导出到指定的文件中:
1.使用如下语法将二进制日志导出到指定的文件:
mysqlbinlog mysql-bin.xxx -vv --base64-output=decode-rows --start-position=a --stop-position=b>/tmp/test.log
2.执行如下语句将日志中的事务导入数据库(应用部分日志):
mysqlbinlog --skip-gtids --start-position=362945607 --stop-position=363101485 mysql-bin000333 |mysql -utest -p -h ip
对于较大的二进制日志文件可以使用more 查看其详细内容
cat mysqlbin-xxxx|more
四、实例:
这里进行一个实例测试,目的是为了模拟主库上日志没有传入到备库时,而出现的部分日志没有应用到备库,而导致的备库不一致问题。
主库执行如下语句: