檢視操作歷史按照日期篩選日誌

2021-10-08 19:45:38 字數 2996 閱讀 9699

專案組同事表示資料在2023年6月25日18點到2023年6月26日9點之間被人改動過,知道是哪個庫的哪張表,但是不知道是做了什麼改動,目前無法進行測試。

過程:使用mysqlbinlog解析二進位制日誌,由於mysql.log 有1.3g,檢查了binlog之後,發現昨天的日誌有3個binlog,因此通過該命令解析,但是binlog解析並沒有記錄登陸的ip。

此處沒有使用show binary log events 的原因是被加密了,無法檢視。

mysqlbinlog命令引數:

常用引數:

–start-datetime=datetime 從二進位制日誌中第1個日期時間等於或晚於datetime參量的事件開始讀取。datetime值相對於執行mysqlbinlog的機器上的本地時區。

該值格式應符合datetime或timestamp資料型別。

–stop-datetime=datetime 從二進位制日誌中第1個日期時間等於或晚於datetime參量的事件起停止讀。關於datetime值的描述參見–start-datetime選項。該選項可以幫助及時恢復。

–start-position=n 從二進位制日誌中第1個位置等於n參量時的事件開始讀。

–stop-position=n 從二進位制日誌中第1個位置等於和大於n參量時的事件起停止讀。

–base64-output=decode-rows 會顯示出row模式帶來的sql變更

-d 與 --database 效果相同,指定乙個資料庫名稱。

–offset=n,-o n 跳過前n個條目。

-v, --verbose reconstruct pseudo-sql statements out of row events. -v

-v adds comments on column data types.

-v, --version print version and exit.

–gtid相關:

–skip-gtids 跳過gtid

–include-gtids=name 列印時間提供的gtid

–exclude-gtids=name 列印所有事件提供的gtid

–print-table-metadata 列印儲存於table_map_log_event的metadata資訊。

注意:1.不要檢視當前正在寫入的binlog檔案

2.不要加–force引數強制訪問

3.如果binlog格式是行模式的,** -v 引數

檢視binlog_format

show variables like 『binlog_format』;

grep 命令:

-b, --before-context=num print num lines of leading context 篩選的字前多少行顯示

-a, --after-context=num print num lines of trailing context 篩選的字後多少行顯示

-n, --line-number print line number with output lines

--line-buffered flush output on every line

# grep 『energywise』 * #在當前目錄搜尋帶'energywise'行的檔案

# grep -r 『energywise』 * #在當前目錄及其子目錄下搜尋'energywise'行的檔案

# grep -l -r 『energywise』 * #在當前目錄及其子目錄下搜尋'energywise'行的檔案,但是不顯示匹配的行,只顯示匹配的檔案

命令

切換到例項的儲存二進位制日誌的var目錄,可以看到符合時間段要求的二進位制日誌都是mysql-bin.00076 開頭,篩選出來的檔案中沒有列印具體的年月日哦只有時間段的。

/home/mysql/mysql/bin/mysqlbinlog --base64-output=decode-rows -v --start-datetime=『2019-06-25 9:00:00』 --stop-datetime=『2019-06-27 9:00:00』 mysql-bin.00076* |grep 『irl_system』 -a 50 >>/home/mysql/opdir/zfy/20190627/06273.sql

/home/mysql/mysql/bin/mysqlbinlog --base64-output=decode-rows -v --start-datetime=『2019-06-25 9:00:00』 --stop-datetime=『2019-06-27 9:00:00』 mysql-bin.000759 |grep 『irl_system』 -a 50 >>/home/mysql/opdir/zfy/20190627/06274.sql

/home/mysql/mysql/bin/mysqlbinlog --base64-output=decode-rows -v --start-datetime=『2019-06-25 18:00:00』 --stop-datetime=『2019-06-26 09:00:00』 mysql-bin.00076* |grep 『irl_system』 -a 50 >>/home/mysql/0626/06269.sql

此時已經定位了sql,此時的內容包含改之前的內容和更改之後的內容。但想要檢視ip,第一次解析的例項的general_log,但是並沒有記錄ip.

grep 「update irl_system」 -a50 -b 10 mysql.log.2019062600 > 5.sql

此時來解析dbproxy的日誌,專案組通過proxy連線。我們的策略是proxy日誌每隔乙個小時列印一次,那就非常方便了。

進入到proxy日誌目錄:

cd /home/mysql/dbproxy_6203/log

grep 「update irl_system」 -a50 -b 10 dbproxy.log.wf.2019062519 > 5.sql

這樣列印出來的就會出現具體的ip位址登陸的使用者,具體的語句,但是沒有更改之前的值,因此看需求解析二進位制還是proxy日誌。

C 按照日期輸出程式日誌

namespace logdata public static void writelog logfile logfile,string msg catch public static void writelog string msg catch public static void writelo...

uWSGI日誌按照日期自動切割

touch logreopen root hello touchforlogrotat注 uwsgi.ini 新增配置選項 日誌檔案 aemonize root hello uwsgi.log 生成乙個監聽的檔案,touch touchforlogrotat 相當於修改了建立時間,系統會重新relo...

linux之按照日期切割nohup日誌

bin bash 獲取前一天的時間 dt date d yesterday y m d 生成備份檔案目錄 mkdir p home packages log 備份檔案 cp home packages running.log home packages log running dt.log 原始檔案...