mysql binlog 统计_对MySQL binlog日志解析,统计每张表的DML次数

此脚本用于解析MySQL binlog日志,统计每张表的INSERT、UPDATE和DELETE操作次数,以确定数据库的热度表。通过读取binlog文件,生成中间日志,然后分析DML事件,最后按操作次数进行排序并打印结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想要获取每天数据库每张表的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])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值