透過Python進行MySQL表資訊統計
今天的目的不是介紹真實的業務場景如何使用 python-mysql-replication,而是推出一枚<MySQL表資訊統計>小工具(筆者透過python-mysql-replication實現的)
工具連結:
在之前我也是使用 @吳炳錫 大神的工具, 因為在了的時候感覺顯示的有點生澀因此在他的基礎上修改了一些重新展示了, 可是在用的時候還是不盡人意。
具體看之前筆者的文章:
大神的工具:
筆者重新展示的工具:
[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
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. 我問了作者但是並沒有得到很好的回應(估計也是我問問題的方式不對吧)
相關問題請看以下連結,(同時希望大家一起來解決一這問題, 來完善以下這個小程式)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2950021/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql透過計劃任務建立月表MySql
- MySQL對所有表收集統計資訊(Python 2指令碼)MySqlPython指令碼
- 透過 Python 進行 ArcGIS 環境設定Python
- 如何透過CRM系統進行合同管理?
- Mysql透過workbench對錶進行匯出匯入MySql
- MySQL 儲存過程進行切換表MySql儲存過程
- ORACLE表統計資訊與列統計資訊、索引統計資訊Oracle索引
- 通過鎖定表的統計資訊來穩定sql的執行計劃SQL
- MySQL統計資訊系列MySql
- 統計資訊記錄表|全方位認識 mysql 系統庫MySql
- 透過 OKR 進行專案過程管理OKR
- 如何透過CRM系統進行銷售機會管理?
- mysql 進行表分割槽MySql
- Python 連線mysql資料庫進行操作PythonMySql資料庫
- MySQL 透過 binlog 恢復資料MySql
- mysql 誤刪除表內資料,透過binlog日誌恢復MySql
- 透過.PAC進行網路釣魚
- 透過dns進行檔案下載DNS
- 如何透過SQLyog分析MySQL資料庫MySql資料庫
- 【Mysql】如何透過binlog恢復資料MySql
- 房地產行業透過ERP系統開發提高企業整體資訊互通!行業
- 透過寫入實體進行匯出
- MySQL資料庫表索引取樣統計MySql資料庫索引
- MySQL如何按周統計表中資料MySql
- 透過Python指令碼理解系統程式Python指令碼
- 【STATS】Oracle遷移表統計資訊Oracle
- 通過Python收集MySQL MHA 部署及執行狀態資訊的功能實現PythonMySql
- 如何對 ABAP 資料庫表透過 ABAP 程式碼進行更新和刪除操作試讀版資料庫
- SMTP操作使用詳解並透過python進行smtp郵件傳送示例Python
- OceanBase學習之路52|如何透過系統變數進行設定?變數
- 成為MySQL DBA後,再看ORACLE資料庫(十四、統計資訊與執行計劃)MySqlOracle資料庫
- 資料字典和固定表統計資訊更新
- 銷售如何透過CRM系統進行客戶跟進
- 【統計資訊】Oracle統計資訊Oracle
- 基於Python的滲透測試資訊收集系統的設計和實現Python
- 如何透過文件協作進行專案管理?專案管理
- 透過AIOps進行網路管理的常用方式AI
- MySQL中Innodb如何計算索引的統計資訊?MySql索引