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 -v  --start-datetime='2020-06-17 06:06:06'    --stop-datetime='2020-06-17 16:06:06'  mysql-bin.xxxx   >  db_name.sql  

 

mysql 8.0版本mysqlbinlog --database=db_name  加数据库名解析出的日志没有sql语句,不加--database=db_name,全局导出就能看到,有懂的朋友帮忙解答下。

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM