导读

在上一篇文章中简单的介绍了使用python-mysql-replication 来解析 MySQL binlog来完成实时统计的业务,当然,在现实的业务中不可能用的那么简单的。

啰哩八说

今天的目的不是介绍真实的业务场景如何使用 python-mysql-replication,而是推出一枚小工具(笔者通过python-mysql-replication实现的)

在之前我也是使用 @吴炳锡 大神的工具, 因为在了的时候感觉显示的有点生涩因此在他的基础上修改了一些重新展示了, 可是在用的时候还是不尽人意。

二话不说直接展示如何使用

1、查看帮助

[root@centos7 tmp]# python mysql_binlog_stat.py --help

usage: mysql_binlog_stat.py [-h] [--host HOST] [--port PORT]

[--username USERNAME] [--password PASSWORD]

[--log-file binlog-file-name]

[--log-pos binlog-file-pos]

[--server-id server-id] [--slave-uuid slave-uuid]

[--blocking False/True] [--start-time start-time]

[--sorted-by insert/update/delete]

Description: The script parse MySQL binlog and statistic column.

optional arguments:

-h, --help show this help message and exit

--host HOST Connect MySQL host

--port PORT Connect MySQL port

--username USERNAME Connect MySQL username

--password PASSWORD Connect MySQL password

--log-file binlog-file-name

Specify a binlog name

--log-pos binlog-file-pos

Specify a binlog file pos

--server-id server-id

Specify a slave server server-id

--slave-uuid slave-uuid

Specify a slave server uuid

--blocking False/True

Specify is bloking and parse, default False

--start-time start-time

Specify is start parse timestamp, default None,

example: 2016-11-01 00:00:00

--sorted-by insert/update/delete

Specify show statistic sort by, default: insert

主要参数介绍:

--log-file:binlog 文件名称

--log-pos: binlog 文件位置(从哪个位置开始解析)

--blocking: 是否需要使用阻塞的方式进行解析始终为 False 就好(默认就是False)

--start-time:从什么时间开始解析

--sorted-by: 展示的结果通过什么来排序, 默认是通过 insert 的行数的多少降序排列, 设置的值有 insert/update/delete

2、解析 MySQL binlog

root@(none) 09:17:12>show binary logs;

------------------ -----------

| Log_name | File_size |

------------------ -----------

| mysql-bin.000012 | 437066170 |

| mysql-bin.000013 | 536884582 |

| mysql-bin.000014 | 537032563 |

| mysql-bin.000015 | 536950457 |

| mysql-bin.000016 | 87791004 |

| mysql-bin.000017 | 143 |

| mysql-bin.000018 | 143 |

| mysql-bin.000019 | 143 |

| mysql-bin.000020 | 143 |

| mysql-bin.000021 | 1426 |

------------------ -----------

10 rows in set (0.01 sec)

# 使用命令

[root@centos7 tmp]# time python mysql_binlog_stat.py --log-file=mysql-bin.000012 --log-pos=120 --username=root --password=root --sorted-by='insert'

[

{

"app_db.business_item_sku_detail": {

"row_insert_count": {

"market_price": 273453,

"sku_id": 273453,

"weight": 273453

},

"table_dml_count": {

"insert": 273453,

"update": 0,

"delete": 0

},

"row_update_count": {}

}

},

{

"app_db.business_item_sku_property": {

"row_insert_count": {

"sku_id": 273112,

"created": 273112,

"property_value_id": 273112,

"business_item_id": 273112,

"record_id": 273112,

"property_id": 273112

},

"table_dml_count": {

"insert": 273112,

"update": 0,

"delete": 0

},

"row_update_count": {}

}

},

{

"app_db.business_item_pic": {

"row_insert_count": {

"created": 270993,

"business_item_id": 270993,

"pic_id": 270993,

"pic_no": 270993,

"tmall_shop_id": 270993,

"pic_url": 270993

},

"table_dml_count": {

"insert": 270993,

"update": 0,

"delete": 0

},

"row_update_count": {}

}

},

{

"app_db.business_item": {

"row_insert_count": {

"guide_commission": 264803,

"commission_type": 264803,

"pstatus": 264803

},

"table_dml_count": {

"insert": 264803,

"update": 0,

"delete": 0

},

"row_update_count": {}

}

},

{

"test.t_binlog_event": {

"row_insert_count": {

"auto_id": 5926,

"dml_sql": 5926,

"dml_start_time": 5926,

"dml_end_time": 5926,

"start_log_pos": 5926,

"db_name": 5926,

"binlog_name": 5926,

"undo_sql": 5926,

"table_name": 5926,

"end_log_pos": 5926

},

"table_dml_count": {

"insert": 5926,

"update": 0,

"delete": 4017

},

"row_update_count": {}

}

},

{

"test.ord_order": {

"row_insert_count": {

"order_id": 184,

"pay_type": 181,

"amount": 184,

"create_time": 184,

"serial_num": 181

},

"table_dml_count": {

"insert": 184,

"update": 0,

"delete": 0

},

"row_update_count": {}

}

},

{

"test.t1": {

"row_insert_count": {

"id": 7,

"name": 7

},

"table_dml_count": {

"insert": 7,

"update": 2,

"delete": 2

},

"row_update_count": {

"name": 2

}

}

},

{

"test.area": {

"row_insert_count": {},

"table_dml_count": {

"insert": 0,

"update": 0,

"delete": 0

},

"row_update_count": {}

}

}

]

real 5m42.982s

user 5m26.080s

sys 0m8.958s

分析了2G多的binlog数据花了大概6分钟时间速度,感觉速度还是不行啊 ^_^。

这边说一下为什么不提供 --stop-log-file, --stop-log-pos, --stop-time 参数

主要是因为 pymysqlreplication 的解析如果是没有解析到结尾,它在 master 上创建的链接会一直存在不会消失,需要人工去master kill掉相关的thread. 我问了作者但是并没有得到很好的回应(估计也是我问问题的方式不对吧)

相关问题请看以下链接,(同时希望大家一起来解决一这问题, 来完善以下这个小程序)。

python统计linux流量,通过Python进行MySQL表信息统计相关推荐

  1. linux下能运行python,(转)Linux下运行python

    原文: http://blog.csdn.net/jackywgw/article/details/48847187 在linux命令行下运行python,可以直接输出hello world jack ...

  2. python做Linux进程运行,Python实现在Linux系统下更改当前进程运行用户

    在上一篇文章中,我们讲了如何在linux上用python写一个守护进程.主要原理是利用linux的fork函数来创建一个进程,然后退出父进程运行,生成的子进程就会成为一个守护进程.细心观察的可能会发现 ...

  3. 怎么用python统计字数_使用Python 统计高频字数的方法

    问题 (来自Udacity机器学习工程师纳米学位预览课程) 用 Python 实现函数 count_words(),该函数输入字符串 s 和数字 n,返回 s 中 n 个出现频率最高的单词.返回值是一 ...

  4. linux下python版本升级,linux下升级python版本

    linux下升级python版本 下载python最新版本2.7.13并编译安装 wget https://www.python.org/ftp/python/2.7.12/Python-2.7.13 ...

  5. linux多cpu运行python脚本,linux系统使用python获取cpu信息脚本分享

    linux系统使用python获取cpu信息脚本分享 代码如下: #!/usr/bin/env Python from __future__ import print_function from co ...

  6. python统计中英文字符个数-Python统计英文、中文、数字、空格等字符数

    Python统计字母.中文.数字.空格等字符数 # 统计一行字符的不同字符个数 str = input("请输入一行字符:") count1 = count2 = count3 = ...

  7. linux下怎么升级python版本,Linux下升级python版本

    转载自:http://lovebeyond.iteye.com/blog/1770476 CentOS下的Python版本一般都比较低,很多应用都需要升级python来完成.我装的centOS的默认的 ...

  8. linux下python版本升级,Linux下升级python版本(示例代码)

    转载自:http://lovebeyond.iteye.com/blog/1770476 CentOS下的Python版本一般都比较低,很多应用都需要升级python来完成.我装的centOS的默认的 ...

  9. 使用Python统计Linux系统内存

    写得比较简单,支持-m -g -k选项 #!/usr/bin/python #*-*coding:utf8*-*"""适用于在/proc/meminfo中提供了可用内存M ...

最新文章

  1. Netflix海外市场交到好运 用户数量猛增
  2. ReSharper 配置及用法(转)
  3. 交换机短路_融商通达变频器功率模块短路维修故障案例
  4. RabbitMQ快速入门--消息模型介绍
  5. Centos7.2源码安装redis
  6. 如何在ASP.NET Core程序启动时运行异步任务(3)
  7. 数据结构上机测试2-2:单链表操作B
  8. 网络协议从入门到底层原理(5)传输层(UDP、TCP - 可靠传输、流量控制、拥塞控制、建立连接、释放连接)
  9. Vue--改变鼠标指针的图片
  10. 互联网行业的常用黑话,你知道几条?
  11. 新浪邮箱接收服务器,新浪和雅虎的邮箱的接收服务器分别是什么?
  12. 撤回/修改已经发送的Outlook邮件
  13. js小游戏-别踩白块儿
  14. 传送门骑士修改服务器数据,《传送门骑士》怎么刷资源 修改存档获取资源方法...
  15. 2 HTML常用标签标签嵌套和并列关系
  16. 期刊分类(CN,ISSN,A,B,C类)
  17. Adobe Acrobat Pro DC 缩小文件大小
  18. 项目 调度 服务器,(2)项目构建(Reactor部分)【Lars-基于C++负载均衡远程服务器调度系统教程】...
  19. 微信如何通过ip访问服务器项目,vue2.0 在微信端如何使用本地IP访问项目
  20. ESP8266-Arduino编程实例-2.8寸TFT LCD驱动(ILI9341控制器)

热门文章

  1. PyTorch 自动微分
  2. Django 模型成员2.2
  3. A 'return' expression required in a function with a block body ('{...}')
  4. CRM中Plugin开发如何将功能放入多个模块
  5. php laravel 环境搭建
  6. 带你搭一个SpringBoot+SpringData JPA的环境
  7. 详解BLE 空中包格式—兼BLE Link layer协议解析
  8. 2022-2028年中国K酸行业发展现状及前瞻分析报告
  9. 计算机网络实验报告建立校园网,计算机网络实验报告
  10. 九度oj 题目1411:转圈