python统计linux流量,通过Python进行MySQL表信息统计
導(dǎo)讀
在上一篇文章中簡(jiǎn)單的介紹了使用python-mysql-replication 來(lái)解析 MySQL binlog來(lái)完成實(shí)時(shí)統(tǒng)計(jì)的業(yè)務(wù),當(dāng)然,在現(xiàn)實(shí)的業(yè)務(wù)中不可能用的那么簡(jiǎn)單的。
啰哩八說(shuō)
今天的目的不是介紹真實(shí)的業(yè)務(wù)場(chǎng)景如何使用 python-mysql-replication,而是推出一枚小工具(筆者通過(guò)python-mysql-replication實(shí)現(xiàn)的)
在之前我也是使用 @吳炳錫 大神的工具, 因?yàn)樵诹说臅r(shí)候感覺(jué)顯示的有點(diǎn)生澀因此在他的基礎(chǔ)上修改了一些重新展示了, 可是在用的時(shí)候還是不盡人意。
二話不說(shuō)直接展示如何使用
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
主要參數(shù)介紹:
--log-file:binlog 文件名稱(chēng)
--log-pos:?binlog 文件位置(從哪個(gè)位置開(kāi)始解析)
--blocking:?是否需要使用阻塞的方式進(jìn)行解析始終為 False 就好(默認(rèn)就是False)
--start-time:從什么時(shí)間開(kāi)始解析
--sorted-by:?展示的結(jié)果通過(guò)什么來(lái)排序, 默認(rèn)是通過(guò) insert 的行數(shù)的多少降序排列, 設(shè)置的值有 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數(shù)據(jù)花了大概6分鐘時(shí)間速度,感覺(jué)速度還是不行啊 ^_^。
這邊說(shuō)一下為什么不提供 --stop-log-file, --stop-log-pos, --stop-time 參數(shù)
主要是因?yàn)?pymysqlreplication 的解析如果是沒(méi)有解析到結(jié)尾,它在 master 上創(chuàng)建的鏈接會(huì)一直存在不會(huì)消失,需要人工去master kill掉相關(guān)的thread. 我問(wèn)了作者但是并沒(méi)有得到很好的回應(yīng)(估計(jì)也是我問(wèn)問(wèn)題的方式不對(duì)吧)
相關(guān)問(wèn)題請(qǐng)看以下鏈接,(同時(shí)希望大家一起來(lái)解決一這問(wèn)題, 來(lái)完善以下這個(gè)小程序)。
總結(jié)
以上是生活随笔為你收集整理的python统计linux流量,通过Python进行MySQL表信息统计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 学习cad需要多少钱
- 下一篇: nginx在linux下安装,Nginx