今天的目的不是介绍真实的业务场景如何使用 python-mysql-replication,而是推出一枚<MySQL表信息统计>小工具(笔者通过python-mysql-replication实现的)
工具链接:
在之前我也是使用 @吴炳锡 大神的工具, 因为在了的时候感觉显示的有点生涩因此在他的基础上修改了一些重新展示了, 可是在用的时候还是不尽人意。
具体看之前笔者的文章:
大神的工具:
笔者重新展示的工具:
二话不说直接展示如何使用 1、查看帮助[root@centos7tmp]#pythonmysql_binlog_stat.py--help usage:mysql_binlog_stat.py[-h][--hostHOST][--portPORT] [--usernameUSERNAME][--passwordPASSWORD] [--log-filebinlog-file-name] [--log-posbinlog-file-pos] [--server-idserver-id][--slave-uuidslave-uuid] [--blockingFalse/True][--start-timestart-time] [--sorted-byinsert/update/delete] Description:ThescriptparseMySQLbinlogandstatisticcolumn. optionalarguments: -h,--helpshowthishelpmessageandexit --hostHOSTConnectMySQLhost --portPORTConnectMySQLport --usernameUSERNAMEConnectMySQLusername --passwordPASSWORDConnectMySQLpassword --log-filebinlog-file-name Specifyabinlogname --log-posbinlog-file-pos Specifyabinlogfilepos --server-idserver-id Specifyaslaveserverserver-id --slave-uuidslave-uuid Specifyaslaveserveruuid --blockingFalse/True Specifyisblokingandparse,defaultFalse --start-timestart-time Specifyisstartparsetimestamp,defaultNone, example:2016-11-0100:00:00 --sorted-byinsert/update/delete Specifyshowstatisticsortby,default:insert
主要参数介绍:
--log-file:binlog 文件名称
--log-pos:binlog 文件位置(从哪个位置开始解析)
--blocking:是否需要使用阻塞的方式进行解析始终为 False 就好(默认就是False)
--start-time:从什么时间开始解析
--sorted-by:展示的结果通过什么来排序, 默认是通过 insert 的行数的多少降序排列, 设置的值有 insert/update/delete
2、解析 MySQL binlogroot@(none)09:17:12>showbinarylogs; ----------------------------- |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| ----------------------------- 10rowsinset(0.01sec) #使用命令[root@centos7tmp]#timepythonmysql_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":{} } } ] real5m42.982s user5m26.080s sys0m8.958s
分析了2G多的binlog数据花了大概6分钟时间速度,感觉速度还是不行啊 ^_^。
这边说一下为什么不提供 --stop-log-file, --stop-log-pos, --stop-time 参数
主要是因为 pymysqlreplication 的解析如果是没有解析到结尾,它在 master 上创建的链接会一直存在不会消失,需要人工去master kill掉相关的thread. 我问了作者但是并没有得到很好的回应(估计也是我问问题的方式不对吧)
相关问题请看以下链接,(同时希望大家一起来解决一这问题, 来完善以下这个小程序)。