- A+
啰哩八说
在上一篇文章中简单的介绍了使用python-mysql-replication 来解析 MySQL binlog来完成实时统计的业务,当然,在现实的业务中不可能用的那么简单的。
今天的目的不是介绍真实的业务场景如何使用 python-mysql-replication,而是推出一枚<MySQL表信息统计>小工具(笔者通过python-mysql-replication实现的)
工具链接: https://github.com/daiguadaidai/mysql_binlog_stat
在之前我也是使用 @吴炳锡 大神的工具, 因为在了的时候感觉显示的有点生涩因此在他的基础上修改了一些重新展示了, 可是在用的时候还是不尽人意。
具体看之前笔者的文章: http://www.ttlsa.com/mysql/mysql-fields-when-time-split/
大神的工具: https://github.com/wubx/mysql-binlog-statistic
笔者重新展示的工具: https://github.com/daiguadaidai/mysql-binlog-statistic
二话不说直接展示如何使用
1、查看帮助
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
[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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
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. 我问了作者但是并没有得到很好的回应(估计也是我问问题的方式不对吧)
相关问题请看以下链接,(同时希望大家一起来解决一这问题, 来完善以下这个小程序)。
https://github.com/noplay/python-mysql-replication/issues/177#issuecomment-265069799
昵称: HH
QQ: 275258836
ttlsa群交流沟通(QQ群②: 6690706 QQ群③: 168085569 QQ群④: 415230207(新) 微信公众号: ttlsacom)

11/07/2017 下午 1:47 沙发
姓名链接出错
04/01/2017 上午 11:11 板凳
挺好的,感谢博主的分享。