对MySQL binlog日志解析,统计每张表的DML次数
想要获取每天数据库每张表的DML的次数,统计热度表,可以使用该脚本
# coding:utf-8
# 解析binlog,统计热度表,表的DML个数 import sys
import os # mysqlbinlog解析binlog日志
def binlog_output():
binlog_file = sys.argv[1]
file_num = binlog_file.split('.')[1] binlog_log = 'binlog_%s.log' % file_num
os.system('/usr/local/mysql5637/mysql/bin/mysqlbinlog -v --base64-output=decode-rows %s > %s' %(binlog_file, binlog_log)) return binlog_log # 对
def binlog_parse(binlog_log): delete_count = 0
update_count = 0
insert_count = 0
update_li = []
insert_li = []
delete_li = []
stop_time_li = [] binlog_f = open(binlog_log, 'r',encoding='utf-8')
for line in binlog_f.readlines():
if line.startswith('### INSERT INTO'):
insert_count += 1
insert_li.append(line[16:].replace('`', '').strip())
if line.startswith('### UPDATE'):
update_count += 1
update_li.append(line[11:].replace('`', '').strip())
if line.startswith('### DELETE FROM'):
delete_count += 1
delete_li.append(line[16:].replace('`','').strip())
if 'Start: binlog' in line:
start_time = line.split('server')[0].replace('#', '')
if 'end_log_pos' in line:
stop_time_li.append(line)
binlog_f.close()
stop_time = stop_time_li[-1].split('server')[0].replace('#', '') start_time = '20' + start_time[:2] + '-' + start_time[2:4] + '-' + start_time[4:]
stop_time = '20' + stop_time[:2] + '-' + stop_time[2:4] + '-' + stop_time[4:] return delete_count,update_count,insert_count,update_li,insert_li,delete_li,start_time,stop_time # 对库和表进统计排序
def DbTableCount(arr):
result = {}
for i in set(arr):
result[i] = arr.count(i)
sort_li = sorted(result.items(), key=lambda x: x[1], reverse=True) return sort_li if __name__ == '__main__': binlog_log = binlog_output()
delete_count, update_count, insert_count, update_li, insert_li, delete_li, start_time,stop_time= binlog_parse(binlog_log)
sort_update_li = DbTableCount(delete_li)
sort_inser_li = DbTableCount(insert_li)
sort_delete_li = DbTableCount(update_li) # 删除解析日志
os.system('rm -f %s' % binlog_log) # 收集时间
print('开始时间: ;', start_time)
print('结束时间: ;', stop_time) # 统计DML总次数
print('\nDML总次数: ', insert_count+update_count+delete_count) # 统计DML次数
print(' Insert总次数: ', insert_count)
print(' Delete总次数: ', delete_count)
print(' Update总次数: ', update_count) # Insert统计
print('\nInsert 统计: ')
for i in sort_inser_li:
print(' DB.Table:', i[0], ', Count:', i[1]) # Delete统计
print('\nDelete 统计: ')
for i in sort_delete_li:
print(' DB.Table:', i[0], ', Count:', i[1]) # Update统计
print('\nUpdate 统计: ')
for i in sort_update_li:
print(' DB.Table:', i[0], ', Count:', i[1])
对MySQL binlog日志解析,统计每张表的DML次数的更多相关文章
- 阿里云mysql数据库恢复总结,mysql binlog日志解析
由于意外..阿里云mysql中有一张表被全部删除了,深吸三口气候,开始解决. 首先用凌晨的自动备份的,进行全量恢复,然后找binlog日志(见下文),查找从全量备份到数据删除之间的记录 这导致了一个问 ...
- Mysql binlog日志解析
1. 摘要: Mysql日志抽取与解析正如名字所将的那样,分抽取和解析两个部分.这里Mysql日志主要是指binlog日志.二进制日志由配置文件的log-bin选项负责启用,Mysql服务器将在数据根 ...
- 转载:阿里canal实现mysql binlog日志解析同步redis
from: http://www.cnblogs.com/duanxz/p/5062833.html 背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数 ...
- Mysql Binlog日志详解
一.Mysql Binlog格式介绍 Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的sql都会记录在 ...
- MySQL binlog格式解析
MySQL binlog格式解析 binlog想必大家都不陌生,在主从复制或者某些情况下的数据恢复会用到.由于binlog是二进制数据,要查看一般都借助mysqlbinlog工具.这篇笔记分析了b ...
- 看数据库的文件大小 MySQL Binlog日志的生成和清理规则
小结: 1.避免并行大大事务对磁盘.内存的消耗: MySQL数据文件导致实例空间满的解决办法_空间/内存_常见问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/kno ...
- 【转载】mysql binlog日志自动清理及手动删除
说明:当开启mysql数据库主从时,会产生大量如mysql-bin.00000* log的文件,这会大量耗费您的硬盘空间.mysql-bin.000001mysql-bin.000002mysql-b ...
- mysql binlog日志自动清理及手动删除
说明:当开启mysql数据库主从时,会产生大量如mysql-bin.00000* log的文件,这会大量耗费您的硬盘空间.mysql-bin.000001mysql-bin.000002mysql-b ...
- 自动清理MySQL binlog日志
开启MySQL binlog日志的服务器,如果不设置自动清理日志,默认binlog日志一直保留着,时间一长,服务器磁盘空间被binlog日志占满,导致MySQL数据库出错. 使用下面方法可以安全清理b ...
随机推荐
- LoadRunner对sockets报文进行压力测试(脚本设计)
1. LR新建一个windows sockets项目 2. action中写入测试代码 如: #include "lrs.h" Action() { char *recvbuf; ...
- python selenium中Excel数据维护(二)
接着python里面的xlrd模块详解(一)中我们我们来举一个实例: 我们来举一个从Excel中读取账号和密码的例子并调用: ♦1.制作Excel我们要对以上输入的用户名和密码进行参数化,使得这些数据 ...
- Spring(九)--通知
Spring之Advice通知 Spring原生的经典模式 实现AOPadvice :通知 前置通知:在目标方法执行之前执行!不能改变方法的执行流程和结果! 实现MethodB ...
- Hbase 三维存储
hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储. 1.row ...
- java学习笔记 - 线程池(一)
线程池(Thread Pool):把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销 优点:(面试题)可重复使用已有线程,避免对象创建.消亡和过度切换的性能开 ...
- Boruvka
大概是这样的:一开始图中有\(n\)个连通块,每次操作我们选出各个连通块连出去的最短的边(如果有相同边权的边的话可以把序号作为第二关键字),然后把这些边加入最小生成树. 最坏的情况下每次操作都会让当前 ...
- 11.jQuery之自定义动画
注意:animate里面是一个对象,他有几个参数,详情可以参考官网 <style> div { position: absolute; width: 200px; height: 200p ...
- echats 油表盘 鼠标拖动指针改变数值
近期需要做一个鼠标拖动完成油表盘数值改变的功能,使用canvas感觉太麻烦,而且指针不太好监听和拖动,只能另谋出路,在网上参考了某位大神的操作,最终选择了echats来解决这个问题.废话不多说,直接上 ...
- mysql复制表结构,复制表数据
MYSQL 复制表 show create table table_name:查看表的建表语句.该语句包含了原数据表的结构,索引等. 使用 SHOW CREATE TABLE 命令获取创建数据表(CR ...
- mongoose 开源http库
Mongoose是一个用C编写的网络库.它为客户端和服务器模式实现TCP,UDP,HTTP,WebSocket,CoAP,MQTT的事件驱动的非阻塞API. 设计理念: Mongoose有三个基本的数 ...