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,全局導出就能看到,有懂的朋友幫忙解答下。