通過Python進行MySQL表資訊統計
導讀 | 在上一篇文章中簡單的介紹了使用python-mysql-replication 來解析 MySQL binlog來完成實時統計的業務,當然,在現實的業務中不可能用的那麼簡單的。 |
今天的目的不是介紹真實的業務場景如何使用 python-mysql-replication,而是推出一枚<MySQL表資訊統計>小工具(筆者通過python-mysql-replication實現的)
在之前我也是使用 @吳炳錫 大神的工具, 因為在了的時候感覺顯示的有點生澀因此在他的基礎上修改了一些重新展示了, 可是在用的時候還是不盡人意。
二話不說直接展示如何使用 1、檢視幫助[[email protected] 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[email protected](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) # 使用命令 [[email protected] 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. 我問了作者但是並沒有得到很好的迴應(估計也是我問問題的方式不對吧)
相關問題請看以下連結,(同時希望大家一起來解決一這問題, 來完善以下這個小程式)。
本文轉載自:http://www.linuxprobe.com/mysql-table-columns-statistics.html
免費提供最新Linux技術教程書籍,為開源技術愛好者努力做得更多更好,開源站點:http://www.linuxprobe.com/
相關推薦
通過Python進行MySQL表資訊統計
導讀 在上一篇文章中簡單的介紹了使用python-mysql-replication 來解析 MySQL binlog來完成實時統計的業務,當然,在現實的業務中不可能用的那麼簡單的。 囉哩八說 今天的目的不是介紹真實的業務場景如何使用 python-mysql-replication,而是推出一枚&l
使用reorgchk進行所有表資訊統計檢查
runstats可以對特定的表進行收集統計資訊。而如果想收集所有表的統計資訊,可以使用reorgchk命令具體如下:1、所有表db2 -v“reorgchk update statistics on table all”2、單個表db2 -v“reorgchk update
python開發mysql:表關系&單表簡單查詢
for 查詢 comment modify tween upd price odi nbsp 一 一對多,多對一 1 1.1 建立多對一 ,一對多的關系需要註意 2 先建立被關聯的表,被關聯的字段必須保證時唯一的 3 在創建關聯的表,關聯的字
通過XtraBackup進行資料庫表備份和表空間傳輸例項
一.安裝教程 1.XtraBackup簡介 XtraBackup有很多功能和優點:例如支援全備、增量備份、部分備份;支援壓縮備份;備份不影響資料讀寫、事務等,但是也有缺陷不足:例如不支援離線備份、不支援直接備份到磁帶裝置、不支援Clo
python匯出資料庫表資訊到excel,方便寫文件
通過簡單的配置匯出資料庫表資訊到excel表格,方便編寫文件。 #!/usr/bin/python # -*- coding: UTF-8 -*- import pymysql import xlwt sql_show_table = "show tables" s
python將mysql表中資料抽取到另一個mysql庫中,持續更新抽取到oracle中
import MySQLdb import ConfigParser class Mysql2Mysql(object): def getConn(self,filename,dbname): cf = ConfigParser.ConfigPars
Python進行MySQL資料庫操作
最近開始玩Python,慢慢開始喜歡上它了,以前都是用shell來實現一些自動化或者監控的操作,現在用Python來實現,感覺更棒,Python是一門很強大的面嚮物件語言,所以作為一個運維DBA或者運維來說,都應該學會用Python來提高工作效率。下面簡單的介紹
jdbc反射mysql表資訊與列資訊
package a11; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; imp
Java通過JDBC 進行MySQL資料庫操作
一:前言 在測試工作中難免會和資料庫打交道,可能大家對資料庫語句都比較熟,比如常見的增刪改查等,但是當我們在做自動化測試時,比如介面測試,大部分請求引數,可能都是從資料庫中取值,並且介面返回值最後都會記錄在資料庫中,這樣前提就需要和資料庫建立連線,才能進行讀寫
python進行mysql的資料庫備份
python進行mysql的資料備份 主要想法是利用mysqldump的方式將mysql的庫或表備份成sql之後,利用ftp的方式轉存到啟發伺服器上,實現一個簡單的備份的功能。程式碼比較簡單,主要核心程式碼如下。 db_back.py # -*- codi
通過python將MySQL,Oracle查詢的資料存到Excel檔案
#!/usr/bin/python # -*- coding: UTF-8 -*- #------------------------------------------------------------------------------- # Name:
ES 24 - 如何通過Elasticsearch進行聚合檢索 (分組統計)
目錄 1 普通聚合分析 1.1 直接聚合統計 1.2 先檢索, 再聚合 1.3 擴充套件: fielddata和keyword的聚合比較 2 巢狀聚合 2.1
Mysql通過Merge引擎進行分表
Mysql通過Merge引擎進行分表 轉載: https://www.jianshu.com/p/9420a6a8ae2e 使用場景 資料表記錄很大,單表記錄會超過1000W,比如使用者表等。 測試環境 Mysql5.
統計了一下員工的資訊!並用Python進行了的分析!這結果真尷尬!
從一個公司的在職員工資訊列表中,分析這個公司男女比例,員工的平均年齡,員工在公司的平均在職年限,以及各個年齡階段的人數,各個職級的男女人數。 不同的行業,同一個崗位,男女比例差異比較大。比如銷售,需要跑客戶,經常出差,還要和客戶吃飯喝酒,所以一般男銷售會多一些。但不是所有
Mysql資料庫及表空間佔用資訊統計
1、mysql中檢視各表的大小 這裡用到一個表, information_schema.tables;對應主要欄位含義如下: ABLE_SCHEMA : 資料庫名 TABLE_NAME:表名 ENGINE:所使用的儲存引擎 TABLES_ROWS:記錄數 DATA_LENGTH:資料大小 INDEX
python通過pandas讀取mysql資料庫表
下午研究了下windows下快速操作mysql的方法 不想裝workbench,因為要裝VS2015 在官網下了一個mysql-shell,用起來還不錯,但是我沒有更多的許可權,select into outfile的時候沒有許可權 mysql-shell官網下載是個還個還不錯的互動式命令列
Linux下通過php對Mysql中的資料進行定時統計併入庫
本文講解Linux下對資料庫的資料進行統計計算並將結果入庫到另一個表中。本文分3部分進行講解:第一部分介紹:linux下執行php的命令;第二部分介紹:通過指令碼實現統計前幾個月的資料併入庫;第三部分介紹:如何實現每日凌晨對昨日的資料進行統計併入庫。 1.Linux下執行
樹莓派安裝mysql資料庫並且通過python來進行儲存操作
具體的安裝資料庫的操作詳見:http://blog.csdn.net/huayucong/article/details/49736427 安裝python-Mysqldb 安裝完成後,加上我之前有一片的溫溼度監測的程式碼: (mysql資料庫在樹莓派上; 使用者名稱密碼
安卓端通過http對Mysql進行增刪改查
name 交流 shm != 用戶 習慣 cti -perm 得到 各類it學習視頻,大家都可以看看哦!我自己本人都是通過這些來學習it只知識的! 下面是視頻鏈接轉自:http://www.cnblogs.com/wangying222/p/5492935.html ht
python-day11-MYSQL 數據庫及數據表
cname number creat ren reference mar score prim def 創庫create database lianx1 DEFAULT character set utf8 表##############################