首页 > 数据库 >perl:mysql binlog iud (insert、update、delete)分析 小脚本:实用程序

perl:mysql binlog iud (insert、update、delete)分析 小脚本:实用程序

时间:2023-12-05 15:47:21浏览次数:33  
标签:info binlog 12 tables IUD Update insert 实用程序 Delete

 1 #!/usr/bin/perl
 2 # utf-8
 3 
 4 use strict;
 5 use POSIX;
 6 use Time::HiRes qw/sleep time/;
 7 
 8 $| = 1;
 9 
10 my $line='# -----------------------------------------------------------------------';
11 my $debug= 0 ;
12 
13 ##-----------------------------------------------------------------------
14 sub now  {strftime("%Y-%m-%d %H:%M:%S", localtime());}
15 sub debug{if ($debug) {print "\n", now(), " : debug: ", (@_), "";}}
16 sub info {print "\n", now(), " : info : ", (@_), "";}
17 sub error{print "\n", now(), " : error: ", (@_), "";}
18 sub warn {print "\n", now(), " : warn : ", (@_), "";}
19 
20 sub qid{"`".lc($_[0])."`";}
21 
22 ##-----------------------------------------------------------------------
23 my %tables=();
24 my $table="DEFAULT";
25 my $top=10;
26 
27 info("开始处理,请稍等 ...");
28 
29 ##-----------------------------------------------------------------------
30 if (defined($ARGV[0])){
31     $top=abs($ARGV[0]);
32 }
33 
34 my @rows;
35 while (my $row=<STDIN>) {
36     debug $row;
37     if ((my $tab) = ($row =~ m/Table_map: (\S+)/)){
38         #debug($tab);
39 
40         $table=$tab;
41         if (not exists($tables{$table})) {$tables{$table}={('Insert'=>0,'Update'=>0,'Delete'=>0,'IUD'=>0)};}
42     }elsif ($row =~ m/(Write|Update|Delete)_rows: table id.*STMT_END_F$/) {
43         debug ("match : ", $1 );
44 
45         if    ($1 eq 'Write') {$tables{$table}{'Insert'}++;}
46         elsif ($1 eq 'Update'){$tables{$table}{'Update'}++;}
47         elsif ($1 eq 'Delete'){$tables{$table}{'Delete'}++;}
48         
49         $tables{$table}{'IUD'}++;
50     }else{
51         ;
52     }
53 }
54 
55 ##-----------------------------------------------------------------------
56 
57 info($line);
58 my $c=0;
59 for my $tab ( sort { ($tables{$a}{'IUD'} <=> $tables{$b}{'IUD'})*(-1) } keys %tables) {
60     $c++;
61     info($tab, " => { IUD => ", $tables{$tab}{'IUD'},
62                     ", Insert => ", $tables{$tab}{'Insert'},
63                     ", Update => ", $tables{$tab}{'Update'},
64                     ", Delete => ", $tables{$tab}{'Delete'},
65                     " }");
66     if ($c>$top){last;}
67 }
68 
69 ##-----------------------------------------------------------------------
70 info($line);
71 info("处理完成.\n");
72 exit 0;

 

使用方式:

1 # 本地,或 Remote。通过管道传递给脚本程序
2 mysqlbinlog -R -h主机 -u用户 -p密码 (其他可选项)--base64-output=decode-rows --start-datetime="2023-12-05 14:45" -t  mysql-bin.000540  | ./mysqlbinlog-iud-analysis_v1.pl 
#或者,直接"<"入 mysqlbinlog处理后的文件
./mysqlbinlog-iud-analysis_v1.pl 7 <mysqlbinlog-output.log 

 

结果如下:

2023-12-05 15:23:19 : info : 开始处理,请稍等 ...
2023-12-05 15:23:20 : info : # -----------------------------------------------------------------------
2023-12-05 15:23:20 : info : `test`.`t1` => { IUD => 23131, Insert => 0, Update => 23131, Delete => 0 }
2023-12-05 15:23:20 : info : `test2`.`ta` => { IUD => 4407, Insert => 1474, Update => 2933, Delete => 0 }
2023-12-05 15:23:20 : info : `test2`.`tb` => { IUD => 2961, Insert => 2940, Update => 21, Delete => 0 }
2023-12-05 15:23:20 : info : `test`.`t2` => { IUD => 2682, Insert => 2682, Update => 0, Delete => 0 }
2023-12-05 15:23:20 : info : `test`.`t3` => { IUD => 1482, Insert => 4, Update => 1478, Delete => 0 }
2023-12-05 15:23:20 : info : `test`.`td` => { IUD => 1468, Insert => 0, Update => 1468, Delete => 0 }
2023-12-05 15:23:20 : info : `test`.`t4` => { IUD => 1461, Insert => 1, Update => 1460, Delete => 0 }
2023-12-05 15:23:20 : info : `test`.`t5` => { IUD => 1017, Insert => 201, Update => 634, Delete => 182 }
2023-12-05 15:23:20 : info : # -----------------------------------------------------------------------
2023-12-05 15:23:20 : info : 处理完成.

 

标签:info,binlog,12,tables,IUD,Update,insert,实用程序,Delete
From: https://www.cnblogs.com/jinzhenshui/p/17877402.html

相关文章

  • 使用mysqlbinlog恢复数据库(逆向或正向都可以)
    我确实喜欢写一些不一样的东西。如果我们在网上搜索“mysql恢复数据库”、“使用mysqlbinlog恢复数据库”、“mysql使用binlog恢复被删除的表”等,一般可以搜索到很多,但是仔细分析会发现,这许多的基本都在讲几件事:1、查看是否已开启在线日志,如果没有开启就开启2、查看日志文件位置3......
  • CF1902 C Insert and Equalize 题解
    LinkCF1902CInsertandEqualizeQuestion有一个\(n\)个元素的数组\(a\),每个元素都不一样现在我们需要在\(a\)中添加一个数字\(a_{n+1}\),和之前的元素都不一样然后选择一个数\(x\),可以在一个元素上加\(x\),为操作一次,(每次加的数都是\(x\))求,操作的最少次数Solution......
  • 详解十大经典排序算法(三):插入排序(Insertion Sort)
    算法原理每次从无序部分选择一个元素,将其插入到有序部分的正确位置,重复这个过程直至整个数组有序。算法描述插入排序是一种简单直观的排序算法,它的基本思想是将一个待排序的元素插入到已经排序好的序列中的适当位置,从而得到一个新的、长度加一的有序序列。插入排序的过程类似于整理......
  • F5 Insert XForwarded For配置
    一、应用场景: 统一权限系统用户登录日志中登录IP一直显示10.122.6.70,而不是用户电脑的实际IP,经查证该IP为F5负载均衡设备IP。登录IP一直显示F5设备IP原因为,网络组为统一权限系统的虚拟IP配置连接池时http参数没有开启InsertXForwardedFor服务导致。与网络组沟通重新创建profile_......
  • SQL 数据操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 语句详解
    SQLSELECTINTO语句SELECTINTO语句将数据从一个表复制到一个新表中。SELECTINTO语法将所有列复制到新表中:SELECT*INTOnewtable[INexternaldb]FROMoldtableWHEREcondition;只复制一些列到新表中:SELECTcolumn1,column2,column3,...INTOnewtable[INexte......
  • SQL 数据操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 语句详解
    SQLSELECTINTO语句SELECTINTO语句将数据从一个表复制到一个新表中。SELECTINTO语法将所有列复制到新表中:SELECT*INTOnewtable[INexternaldb]FROMoldtableWHEREcondition;只复制一些列到新表中:SELECTcolumn1,column2,column3,...INTOnewtable[INext......
  • mysql c++ create table,insert,select
    CREATETABLE`t1`(`id`bigintunsignedNOTNULLAUTO_INCREMENTprimarykey,`author`varchar(40)NOTNULLDEFAULT'',`comment`varchar(40)NOTNULLDEFAULT'',`content`varchar(40)NOTNULLDEFAULT'',`header`......
  • SQL INSERT INTO 语句详解:插入新记录、多行插入和自增字段
    SQLINSERTINTO语句用于在表中插入新记录。INSERTINTO语法可以以两种方式编写INSERTINTO语句:指定要插入的列名和值:INSERTINTO表名(列1,列2,列3,...)VALUES(值1,值2,值3,...);如果要为表的所有列添加值,则无需在SQL查询中指定列名。但是,请确保值的顺序与表......
  • SQL INSERT INTO 语句详解:插入新记录、多行插入和自增字段
    SQLINSERTINTO语句用于在表中插入新记录。INSERTINTO语法可以以两种方式编写INSERTINTO语句:指定要插入的列名和值:INSERTINTO表名(列1,列2,列3,...)VALUES(值1,值2,值3,...);如果要为表的所有列添加值,则无需在SQL查询中指定列名。但是,请确保值的顺序与表......
  • InsertionSort
     JavaprivatestaticvoidinsertionSort(int[]array){for(inti=1;i<array.length;++i){intindex=i-1,mark=array[i];while(mark<array[index]){array[index+1]=array[index];......