MySQL基礎運維——percona-toolkit運維工具

dapolan發表於2022-03-08

一、percona-toolkit工具

percona-toolkit是一組高階命令列工具的集合,用來執行各種透過手工執行非常複雜和麻煩的 mysql 任務和系統任務,這些任務包括:

  • 檢查 master 和 slave 資料的一致性

  • 有效地對記錄進行歸檔

  • 查詢重複的索引

  • 對伺服器資訊進行彙總

  • 分析來自日誌和 tcpdump 的查詢

  • 當系統出問題的時候收集重要的系統資訊

percona-toolkit 源自 Maatkit 和 Aspersa 工具,這兩個工具是管理 mysql 的最有名的工具,現在 Maatkit 工具已經不維護了,請大家還是使用 percona-toolkit 吧! 這些工具主要包括開發、效能、配置、監控、複製、系統、實用六大類,作為一個優秀的 DBA,裡面有的工具非常有用,如果能掌握並加以靈活應用,將能極大的提高工作效率。

1、percona-toolkit軟體包下載

 

2、  percona-toolkit軟體安裝

軟體安裝存在三種安裝方式,分別為RPM包、二進位制包、原始碼安裝。

需安裝依賴包

1
yum  install  perl-DBI perl-DBD-MySQL

1.RPM包安裝方式

1
rpm –ivh percona-toolkit-3.1.0-2.el7.x86_64.rpm

2.二進位制包安裝

1
2
3
4
5
tar  –xvf percona-toolkit-3.0.11_x86_64. tar .gz
cd  percona-toolkit-3.0.11
perl Makefile.PL
make
make  install

下面介紹它自帶的一些工具

2、pt-kill工具

1、工具介紹

pt-kill 是一個簡單而且很實用的查殺mysql執行緒和查詢的工具,主要是為了防止一些大/複雜/長時間查詢佔用資料庫及系統資源,而對線上業務造成影響的情況。

2、常用引數

常用引數

含義

--user

使用者

--password

密碼

--port

--host

主機

--socket

本地套接字

--match-command

匹配狀態

--match-info

匹配資訊

--match-state 

匹配宣告

--ignore-host/--match-host

匹配主機

--ignore-db/--match-db

匹配資料庫

--ignore-user/--match-user

匹配使用者

--kill

殺掉連線並且退出

--kill-query

只殺掉連線執行的語句,但是執行緒不會被終止

--print

列印滿足條件的語句

--busy-time

SQL執行時間的執行緒

--idle-time

sleep時間的連線執行緒,必須在--match-command sleep時才有效

--interval

query的間隔

--victim   

oldest|all|all-but-oldest 針對範圍

--daemonize

是否放到後臺執行

--interval

執行頻率(s=seconds, m=minutes, h=hours, d=days)

--log-dsn  D=test,t=pk_log 

記錄資訊到表中

3、實際案例

以下均省略連線引數!

3.1 殺執行時間超過10s的SQL語句但保留執行緒

1
pt- kill  --busy- time =10 --victims all --print -- kill -query

3.2 查某IP來源且執行時間超過20s的會話

1
pt- kill  --match-host  "10.100.50.29"  --print --victims all --busy- time =20s

3.3 每10秒檢查一次,狀態為sleep的程式就給幹掉

1
pt- kill  --match- command  Sleep --victims all --interval 10 -- kill  --print

3.4 查殺select大於10s的會話

1
pt- kill  --match-info  "select|Select|SELECT"   --print  --victims all --busy- time  20s

3.5 查狀態為sleep的程式且時間超過1h

1
pt- kill  --match- command  Sleep --victims all  --idle- time =1h --print

3.6 查殺訪問某使用者的會話

1
pt- kill  --match-user  "test"  --victims all  --print -- kill

3.7 將執行記錄記錄到表中

1
pt- kill  --log-dsn D= test ,t=pk_log --create-log-table --host=192.168.186.11 --user=root --password=mysql --port=3306 --busy- time =10 --print -- kill -query

注:

指定庫必須存在否則會報錯!

test庫中pk_log表,若不存在先建立表--create-log-table

3.8 殺掉正在進行filesort的sql

1
pt- kill  --match- command  Query --match-state “Sorting result” --busy- time  10  --interval 10 --run- time  1  --print -- kill  --victims all

3.9 後臺執行殺掉正在進行filesort的sql

1
pt- kill  --match- command  Query --match-state “Sorting result” --busy- time  10  --interval 10 --run- time  1  --print -- kill  --victims all --daemonize

注:

--daemonize 會將該命令放到後臺不斷執行。

3.10 篩選檔案中processlist

1
2
mysql -e  "SHOW PROCESSLIST"  > proclist.txt
pt- kill  -- test -matching proclist.txt --busy- time  60 --print

3、pt-query-digest工具

1、工具介紹

分析查詢執行日誌,併產生一個查詢報告,為 MySQL、 PostgreSQL、memcached 過濾、重放或者轉換語句。

2、常用引數

常用引數

含義

--create-review-table

當使用--review引數把分析結果輸出到表中時,如果沒有表就自動建立

--create-history-table

當使用--history引數把分析結果輸出到表中時,如果沒有表就自動建立

--filter

對輸入的慢查詢按指定的字串進行匹配過濾後再進行分析

--limit

限制輸出結果百分比或數量,預設值是20,即將最慢的20條語句輸出

--host

mysql伺服器地址

--user

mysql使用者名稱

--password

mysql使用者密碼

--history

將分析結果儲存到表中,分析結果比較詳細,下次再使用--history時,如果存在相同的語句,且查詢所在的時間區間和歷史表中的不同,則會記錄到資料表中,可以透過查詢同一CHECKSUM來比較某型別查詢的歷史變化

--review

將分析結果儲存到表中,這個分析只是對查詢條件進行引數化,一個型別的查詢一條記錄,比較簡單。當下次使用--review時,如果存在相同的語句分析,就不會記錄到資料表中

--output

分析結果輸出型別,值可以是report(標準分析報告)、slowlog(Mysql slow log)、json、json-anon,一般使用report,以便於閱讀

--since

從什麼時間開始分析,值為字串,可以是指定的某個”yyyy-mm-dd (hh:mm:ss)”格式的時間點,也可以是簡單的一個時間值:s(秒)、h(小時)、m(分鐘)、d(天),如12h就表示從12小時前開始統計。

--until

截止時間,配合—since可以分析一段時間內的慢查詢


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014851/viewspace-2867430/,如需轉載,請註明出處,否則將追究法律責任。

相關文章