首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 慢日誌按時間切片工具:cutlogbytime 秒級定位故障時間窗口

     編輯:MySQL 綜合教學

痛點

慢日誌達數 GB、短格式、無時間索引,排查「連接數突增」等突發故障時,全文檢索極慢。需一個工具按 Unix 時間戳區間切出目標片段,再餵給 pt-query-digest 分析。

工具獲取

git clone https://github.com/wubx/mysql-binlog-statistic.git
cd mysql-binlog-statistic/bin
# 直接可執行:cutlogbytime

使用方法

./cutlogbytime /path/slow.log start_unix_ts end_unix_ts > slice.log

實戰示例:切出 2013-04-05 全天慢查詢

mysql> SELECT UNIX_TIMESTAMP('2013-04-05');  -- 1365091200
mysql> SELECT UNIX_TIMESTAMP('2013-04-06');  -- 1365177600

shell> ./cutlogbytime /var/log/mysql/slow.log 1365091200 1365177600 > 20130405_slow.log

進階用法:疊代切片

# 先切出一天
./cutlogbytime slow.log 1365091200 1365177600 > day.log
# 再在一天內切出故障小時
./cutlogbytime day.log 1365120000 1365130000 > hour.log
# 最後餵給分析工具
pt-query-digest hour.log

工具原理(簡述)

  • 慢日誌每條記錄以 # Time: YYMMDD HH:MM:SS 開頭。
  • 工具逐行解析時間行,轉換為 Unix 時間戳,判斷是否落在 [start, end) 區間。
  • 屬於區間內的完整語句塊(含 # User@Host、# Query_time、SQL 正文)整體輸出。

避坑提示

  • 慢日誌必須開啟 log_timestamps=SYSTEM(默認),且格式為標準短格式。
  • 長格式(log_slow_admin_statements 等)可能需微調解析邏輯。
  • 極大文件(>10GB)建議先 split -l 1000000 分塊並行切片再合併。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved