太原企业做网站制作网页的网站
文章目录
- 前言
- 一、分析 binlog 内容
- 二、编写脚本
- 结果
- 总结
前言
高效快捷分析 mysql binlog 日志文件。
mysql binlog 文件很大
怎么快速通过关键字查找内容
一、分析 binlog 内容
通过 mysqlbinlog
命令可以看到 binlog 解析之后的大概样子
二、编写脚本
编写脚本 search_txt.sh,作用是搜索 binlog 内容
使用 awk
#!/bin/bash# 设置变量if [ "$1" = "" ]; then echo "param can not null "exit 1
fi
BINLOG_FILE="/pddyjc/mysql/logbin/log_bin.$1" # 替换为你的 binlog 文件路径
SEARCH_STRING="pddyjc_pb_year_sxbph_report_info" # 替换为你要搜索的字符串
OUTPUT_FILE="search_pddyjc_pb_year_sxbph_report_info_$1.txt" # 替换为你想要保存输出结果的文件路径if [ -e "$BINLOG_FILE" ]; thenecho "$BINLOG_FILE"
else echo "$BINLOG_FILE file not exists"exit 1
fi
# 使用 awk 筛选 binlog 中包含特定字符串的完整事件
/pddyjc/mysql/bin/mysqlbinlog "$BINLOG_FILE" | awk -v search_string="$SEARCH_STRING" 'BEGIN { capturing = 0; prev_date_str = ""; # 附加, 记录上一次时间行}# /[#]/ { next; } # 跳过注释行/$/ { # 空行表示新事件的开始if (capturing) {capturing = 0; # 结束当前事件的捕获}}{# 自定义判断条件 if ($0 ~ search_string && $0 !~ "insert") {capturing = 1; # 开始捕获事件if (prev_date_str != "") {print prev_date_str; # 这里输出有时间那行,以方便判断执行时间}}if (capturing) {print; # 如果正在捕获事件,则输出当前行}# 更新 prev_date_strif ($0 ~ "end_log_pos") { prev_date_str = $0 # 把时间行缓存} }
' > "$OUTPUT_FILE"# 输出结果提示
echo "筛选完成,结果已保存到 $OUTPUT_FILE"
执行方式, 1234 是binlog 文件名序号(根据实际情况替换)
sh search_txt.sh 1234
结果
查看输出文件内容,得到的结果内容如下
总结
熟悉掌握 awk
,快速通过指定关键字、表名等查找二进制日志内容。
—————— 但行好事莫问前程,你若盛开蝴蝶自来