当前位置: 首页 > java >正文

mysql日志文件binlog分析记录

1、binlog转sql
使用mysql自带的binlog工具

mysqlbinlog  --base64-output=decode-rows -v /var/lib/mysql/binlog.000208 --result-file=/var/lib/mysql/binsql000208.sql

2、筛选统计操作

      import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;public class TxtReadWrite {static String inFileName = "D:\\docker\\mysql\\data\\binsql000050.sql";static String outFileName = "D:\\test\\binsql46-50.txt";static Queue<String> Line_Queue = new ConcurrentLinkedQueue<>();static BufferedWriter writer;static {try {writer = new BufferedWriter(new FileWriter(outFileName,true));} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws IOException, ParseException {
//        筛选update和delete操作readAndWrite();
//        统计每个表的操作数量countOperation();
//        统计已有thread_idcountThreadId();
//        每两个小时统计一次操作次数countAsHour();
//          统计每个thread-id更改每个表的次数countIdAndTable();}public static void countIdAndTable() throws IOException {String inFileForCount =  "D:\\test\\binsql46-50.txt";//文件内只有删除、更新FileReader fileReader = new FileReader(inFileForCount);BufferedReader bufferedReader = new BufferedReader(fileReader);String line = bufferedReader.readLine();Map<String,Integer> map = new HashMap();String threadId = "";String tablename ="";while (line != null) {if(line.contains("thread_id")){threadId = line.substring(line.indexOf("thread_id="), line.lastIndexOf("exec_time"));}else if(line.contains("`.`")){tablename = line.substring(line.indexOf("`"), line.lastIndexOf("`"));String str =  threadId+"  "+tablename;Integer i = map.get(str)==null?0:map.get(str);i+=1;map.put(str,i);}line = bufferedReader.readLine();}System.out.println(map.toString());}public static void countAsHour() throws IOException, ParseException {String inFileForCount =  "D:\\test\\binsql46-50.txt";//文件内只有删除、更新FileReader fileReader = new FileReader(inFileForCount);BufferedReader bufferedReader = new BufferedReader(fileReader);String line = bufferedReader.readLine();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd HH:mm:ss");String beginStr = "20220326  12:00:00";Date beginTime = simpleDateFormat.parse(beginStr);Map<String,Integer> m= new HashMap();Date current;while (line != null) {if(line.contains("thread_id")){String substring = "20"+line.substring(1, 16);current= simpleDateFormat.parse(substring);System.out.println(substring);if (current.getTime()+ (8 * 60 * 60 * 1000)<=beginTime.getTime()){String s = simpleDateFormat.format(beginTime.getTime());Integer i = m.get(s)==null?0:m.get(s);i+=1;m.put(s,i);line = bufferedReader.readLine();}else{beginTime= new Date(beginTime.getTime() + (2 * 60 * 60 * 1000));String s = simpleDateFormat.format(beginTime);m.put(s,0);System.out.println(beginTime);continue;}}else{line = bufferedReader.readLine();}}System.out.println(m.toString());}public static void countThreadId() throws IOException {String inFileForCount =  "D:\\test\\binsql46-50.txt";//文件内只有删除、更新FileReader fileReader = new FileReader(inFileForCount);BufferedReader bufferedReader = new BufferedReader(fileReader);String line = bufferedReader.readLine();HashSet set = new HashSet();while (line != null) {if(line.contains("thread_id")){String substring = line.substring(line.indexOf("thread_id="), line.lastIndexOf("exec_time"));set.add(substring);}line = bufferedReader.readLine();}System.out.println(set.size());for (Object o : set) {System.out.println(o+",");}}public static void countOperation() throws IOException {String inFileForCount =  "D:\\test\\binsql46-50.txt";//文件内只有删除、更新FileReader fileReader = new FileReader(inFileForCount);BufferedReader bufferedReader = new BufferedReader(fileReader);String line = bufferedReader.readLine();HashMap<String, Integer> count = new HashMap<>();while (line != null) {if(line.contains("`")){String substring = line.substring(line.indexOf("`"), line.lastIndexOf("`"));Integer i = count.get(substring)==null?0:count.get(substring);i +=1;count.put(substring,i);}line = bufferedReader.readLine();}System.out.println(count.toString());}public static void readAndWrite() throws IOException {//        读取FileReader fileReader = new FileReader(inFileName);BufferedReader bufferedReader = new BufferedReader(fileReader);String line = bufferedReader.readLine();while (line != null) {if (line.contains("thread_id=")) {
//                String peek = Line_Queue.peek();//获取队列头 ;不移除if(Line_Queue.size()==1){Line_Queue.clear();}else{executeQueue();}Line_Queue.add(line);line = bufferedReader.readLine();continue;}if (line.startsWith("###")) {if (line.contains(" UPDATE ")||line.contains(" DELETE ")) {Line_Queue.add(line);line = bufferedReader.readLine();while(line != null&&line.startsWith("###")) {Line_Queue.add(line);line = bufferedReader.readLine();}}}line = bufferedReader.readLine();}bufferedReader.close();fileReader.close();}public static void executeQueue() throws IOException {//        写入int size = Line_Queue.size();for (int i = 0; i < size; i++) {String line = Line_Queue.poll();writer.write(line);writer.newLine();//写换行符
//            this.execute(sql);}writer.flush();}
}
http://www.xdnf.cn/news/8258.html

相关文章:

  • 结构性断裂:中年失业潮与婚姻解体的崩溃逻辑
  • 数学基础知识:三角函数
  • 【打卡】车厢重排
  • java后端-海外登录(谷歌/FaceBook/苹果)
  • 汽配知识(四)不同车型与区域市场的分类差异
  • 率先实现混合搜索:使用 Elasticsearch 和 Semantic Kernel
  • Java IO流完全解析:从基础到高级应用
  • Vue.js教学第十一章:VueRouter实战指南
  • 在 Matter.js 物理引擎中,isSensor 布尔属性的使用
  • MySQL 数据库表结构修改与字段添加
  • C++:关联容器set容器,multiset容器
  • 【Python】开发工具uv
  • KS107BG型超声体模的结构及性能
  • Pinia持久化存储插件, 持久化存储插件安装(超详细教程)
  • 【KWDB 2025 创作者计划】_KWDB时序数据库特性及跨模查询
  • 使用 vip 加入两台 master 节点
  • 【AI模型学习】上/下采样
  • 【SpringBoot实战指南】使用 Spring Cache
  • 5.22 打卡
  • 生存资料的多因素分析,如果满 足等比例风险假定, 采用Cox回归; 如果不满足等比例风险假定,则考虑采用 非等比例Cox回归分析研究预后因素的影响
  • Java版本的VPN(wlcn)
  • 我的世界模组开发——物理学(1)
  • PiliPlus 非常好用的开源软件第三方B站哔哩哔哩 v1.1.3.35
  • Vue 3.0中异步组件defineAsyncComponent
  • JC/T 2387-2024 改性聚苯乙烯泡沫(EPS)复合装饰制品检测
  • 从零基础到最佳实践:Vue.js 系列(10/10):《实战项目——从零到上线》
  • 2025淘宝最新DSR评分计算方式
  • Python RSA加解密脚本
  • AI相关的笔记
  • (第93天)OGG 搭建 Oracle 19C 数据同步 - 远程部署