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 抽取(读取) 二进制日志的主要内容,如果未能解决你的问题,请参考以下文章

mysqlbinlog命令使用

使用mysqlbinlog提取二进制日志

mysql ,binlog 日志查询

mysql ,binlog 日志查询

使用mysqlbinlog提取二进制日志

mysqlbinlog(日志管理工具)