mysqlbinlog 抽取(读取) 二进制日志
Posted 随便写写-运维
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysqlbinlog 抽取(读取) 二进制日志相关的知识,希望对你有一定的参考价值。
mysql 一般没人会开启全局日志,量太大了,还占用服务器资源。但是binlog 都是开启的(不会还有不开启binlog的兄弟吧)
有时会遇到 查询某段时间sql历史的 问题:
二进制日志没法直接看,mysql有自带的mysqlbinlog 命令/工具 可以解析二进制日志
最开始自己一般直接用 mysqlbinlog --database=db_name mysql-bin.xxxx > db_name.sql 过滤到想要的库
grep -B3 -w tb_name db_name.sql > tb_name.sql 过滤到想要的表 ,这里grep -B 可以看自己情况设置几,不太明白的可以先了解下grep命令
再根据时间用sed截取 时间段的日志 cat tb_name.sql | sed -n ‘/开始时间/,/结束时间/p‘ 查看
这是我第一次查看方法,这个方法查看时间段有点傻。。。。。
后来经过同事提携,升级了。mysqlbinlog本来就可以定义开始时间和结束时间
mysqlbinlog --database=db_name --start-datetime=‘2020-06-17 06:06:06‘ --stop-datetime=‘2020-06-17 16:06:06‘ mysql-bin.xxxx > db_name.sql
而且也可以利用pos点来精确问题 --start-opsiton --stop-position
后来又遇到一次,mysqlbinlog解析不出来,解析出来的还是看不了。因为binlog的格式问题,这个就不详细说明了
加参数
mysqlbinlog --database=db_name --base64-output=decode-rows -vvv --start-datetime=‘2020-06-17 06:06:06‘ --stop-datetime=‘2020-06-17 16:06:06‘ mysql-bin.xxxx > db_name.sql
--base64-output=decode-rows -vv (这里用几个v,貌似还有说法,没细看,有兴趣的可以了解下)
以上是关于mysqlbinlog 抽取(读取) 二进制日志的主要内容,如果未能解决你的问题,请参考以下文章