#!/bin/bash
##===================================================##
## 脚本出自《MySQL运维内参》
##===================================================##
BINLOG_EXE="/export/servers/mysql/bin/mysqlbinlog"
BINLOG_FILE="/export/data/mysql/data/mysql-bin.000002"
START_TIME="2015-01-21 00:00:00"
STOP_TIME="2019-01-01 00:00:00"
OUTPUT_FILE="/tmp/binlog_summary.txt"
"${BINLOG_EXE}" --base64-output=decode-rows -vv --start-datetime="${START_TIME}" --stop-datetime="${STOP_TIME}" ${BINLOG_FILE} | awk \
'BEGIN {xid="null";s_type=""; stm="";endtm="";intsta=0;inttal=0;s_count=0;count=0;insert_count=0;update_count=0;delete_count=0;flag=0;bf=0;period=0;} \
{
if (match($, /^(BEGIN)/)) {bg=;} \
if (match($, /#.*server id/)) {if(bg==){statm=substr($,,)" "$;cmd=sprintf("date -d \"%s\" +%%s", statm);cmd|getline intsta;close(cmd);bg=;bf=;}else if(bf==){endtm=substr($,,)" "$;cmd=sprintf("date -d \"%s\" +%%s", endtm);cmd|getline inttal;close(cmd);}} \
if(match($, /#.*Table_map:.*mapped to number/)) {printf "Timestamp : " $ " " $ " Table : " $(NF-); flag=} \
else if (match($, /#.*Xid =.*/)) {xid=$(NF)} \
else if (match($, /(### INSERT INTO .*..*)/)) {count=count+;insert_count=insert_count+;s_type="INSERT"; s_count=s_count+;} \
else if (match($, /(### UPDATE .*..*)/)) {count=count+;update_count=update_count+;s_type="UPDATE"; s_count=s_count+;} \
else if (match($, /(### DELETE FROM .*..*)/)) {count=count+;delete_count=delete_count+;s_type="DELETE"; s_count=s_count+;} \
else if (match($, /^(# at) /) && flag== && s_count>) {print " Query Type : "s_type " " s_count " row(s) affected" ;s_type=""; s_count=; } \
else if (match($, /^(COMMIT)/)) {period=inttal-intsta;if(inttal==){period=};print "[Transaction total : " count " Insert(s) : " insert_count " Update(s) : " update_count " Delete(s) : " \
delete_count " Xid : "xid" period : "period" ] \n+----------------------+----------------------+----------------------+----------------------+"; \
count=;insert_count=;update_count=; delete_count=;s_type=""; s_count=; flag=;bf=;bg=;} } ' \
> "${OUTPUT_FILE}" >& if [ $? -eq ]
then
echo "success,please see result in ${OUTPUT_FILE}"
else
echo "failed,please see result in ${OUTPUT_FILE}"
fi

MySQL--运维内参中的binlog_summary脚本的更多相关文章

  1. mysql运维必会的一些知识点整理

    (1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...

  2. mysql运维必会的一些知识点整理(转自民工哥)

    (1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...

  3. 搭建稳固的MySQL运维体系

    MySQL 监控要点 MySQL 监控要点,主要涉及服务器和 MySQL 两个方向的监控告警. 在这两个监控告警方向需要重点关注监控策略.监控趋势图及报警方式. 监控策略指的是每个监控项的告警阈值,例 ...

  4. 公司没有 DBA,Mysql 运维自己来

    如果你的公司有 DBA,那么我恭喜你,你可以无视 Mysql 运维.如果你的公司没有 DBA,那你就好好学两手 Mysql 基本运维操作,行走江湖,防身必备. 环境:CentOS7 版本: 一.虚拟机 ...

  5. 运维工作中sed常规操作命令梳理

    sed是一个流编辑器(stream editor),一个非交互式的行编辑器.它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间",接着用sed命令处理缓冲 ...

  6. Python 开发个人微信号在运维开发中的使用

    一.主题:Python 开发个人微信号在运维开发中的使用 二.内容: 企业公众号 介绍开发微信公众号的后台逻辑,包括服务器验证逻辑.用户认证逻辑 个人微信号 面对企业微信的种种限制,可以使用 Itch ...

  7. 美图秀秀DBA谈MySQL运维及优化

    美图秀秀DBA谈MySQL运维及优化 https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=401797597&idx=2& ...

  8. 转:三思!大规模MySQL运维陷阱之基于MyCat的伪分布式架构

    在微信公众号看到一篇关于mycat的文章,觉得分析的很不错,给大家分享一下 三思!大规模MySQL运维陷阱之基于MyCat的伪分布式架构 原文链接:https://mp.weixin.qq.com/s ...

  9. 七年老运维实战中的 Shell 开发经验总结【转】

    无论是系统运维,还是应用运维,均可分为“纯手工”—> “脚本化”—> “自动化”—>“智能化”几个阶段,其中自动化阶段,主要是将一些重复性人工操作和运维经验封装为程序或脚本,一方面避 ...

随机推荐

  1. 非常优秀的swiper插件————幻灯片播放、图片轮播

    http://www.idangero.us/ http://www.swiper.com.cn/ Swiper中文网 2015-10-15 SuperSlide2: (这是个PC用的滚屏插件,看着不 ...

  2. 反序列化失败Failed to deserialize --- local class incompatible: stream classdesc serialVersionUID

    反序列化失败: java.lang.IllegalStateException: Failed to execute CommandLineRunner at org.springframework. ...

  3. SpringBoot 之 MVC

    SpringBoot MVC 和静态资源 首先,我们一定要搞清楚,mvc 配置和 static 配置的联系和区别. mvc 配置其实就是给 spring mvc 框架用的, 具体来说, 比如 @Req ...

  4. ActiveMQ(2)---ActiveMQ原理分析之消息发送

    持久化消息和非持久化消息的发送策略 消息同步发送和异步发送 ActiveMQ支持同步.异步两种发送模式将消息发送到broker上.同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消 ...

  5. PHP响应码和HTTP请求方法

    HTTP请求报文由请求行(request line).请求头部(header).空行和请求数据4个部分组成,格式如下 可见请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格 ...

  6. python TKinter部分记录

    http://blog.shouji-zhushou.com/python-gui-tkinter-grid%E7%BD%91%E6%A0%BC%E5%87%A0%E4%BD%95%E5%B8%83% ...

  7. Python 进行查询日志查询条件分析

    任务:crm日志的查询条件  每次是哪几个字段查,有几种组合 ,统计每种组合查询的量 日志样例: -- ::] -- ::] 查询条件:query查询条件可以多个,用|and|分割. 步骤: 1.正则 ...

  8. JavaScript学习-4——DOM对象、事件

    本章目录 --------window对象 --------document对象 --------事件 一.window对象 函数调用: 自己封装的函数只写:函数名(): 数学函数Math 例:绝对值 ...

  9. epoll的LT和ET(转)

    1 socket IO事件 1.1 读事件 读事件:句柄从不可读变成可读,或者句柄写缓冲区有新的数据进来且超过SO_RCVLOWAT. 常见的产生读事件有如下几种: socket有一个未清除的错误.如 ...

  10. Java框架spring Boot学习笔记(一):开始第一个项目

    新建一个项目,选择Spring initializr 修改group和项目名 添加依赖包Web,MongoDB 设置保存位置和工程名 新建一个test的文件 输入代码: package com.xxx ...