最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL運維神器pt-kill清理垃圾SQL的完整指南

 更新時間:2026年03月26日 09:51:21   作者:·云揚·  
在日常開發(fā)過程中,誰沒遇到過這種窘境:業(yè)務高峰期突然 CPU 狂飆,大量連接堆積,排查發(fā)現(xiàn)是幾條失控的慢查詢在瘋狂占用資源,Percona Toolkit 中的 pt-kill 工具,正是解決這類問題的手術刀,今天就帶大家從基礎用法到生產實戰(zhàn),徹底掌握這個運維必備工具

在日常開發(fā)過程中,誰沒遇到過這種窘境:業(yè)務高峰期突然 CPU 狂飆,大量連接堆積,排查發(fā)現(xiàn)是幾條失控的慢查詢在瘋狂占用資源。手動執(zhí)行show processlist查找線程 ID 再kill?等操作完成,業(yè)務可能已經(jīng)受損。而 Percona Toolkit 中的 pt-kill 工具,正是解決這類問題的 “手術刀”—— 它能自動監(jiān)控并斬殺符合條件的垃圾 SQL,讓數(shù)據(jù)庫重獲新生。今天就帶大家從基礎用法到生產實戰(zhàn),徹底掌握這個運維必備工具!

一、環(huán)境準備:權限配置是前提(避坑關鍵)

在開始使用 pt-kill 前,必須先解決權限問題。很多同學反饋 “命令執(zhí)行成功卻沒 kill 掉 SQL”,本質是權限配置不當。

1. 基礎權限配置(兼容 MySQL 5.7/8.0)

創(chuàng)建專用運維賬號,避免使用 root 賬號直接操作:

# 創(chuàng)建dba用戶并授權
CREATE USER 'dba'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'Id81Gdac_a';
# 必需權限:PROCESS(查看所有線程)+ SUPER(終止線程,5.7及以下)
GRANT PROCESS, SUPER ON *.* TO 'dba'@'localhost';
FLUSH PRIVILEGES;

2. MySQL 8.0 權限優(yōu)化(推薦方案)

MySQL 8.0 已廢棄 SUPER 權限的部分功能,推薦使用細粒度動態(tài)權限,更安全可控:

# 8.0專用授權:CONNECTION_ADMIN(替代SUPER的kill權限)+SYSTEM_USER (保護或操作“系統(tǒng)賬戶”)+ PROCESS(查看線程)
GRANT PROCESS, CONNECTION_ADMIN, SYSTEM_USER ON *.* TO 'dba'@'localhost';

注意:PROCESS 權限允許查看所有用戶的 SQL 原文,可能泄露敏感信息,建議僅授權給信任的運維人員。

3. 工具安裝(CentOS 示例)

若未安裝 Percona Toolkit,執(zhí)行以下命令:

# 下載最新穩(wěn)定版3.5.4
wget https://downloads.percona.com/downloads/percona-toolkit/3.5.4/binary/redhat/7/x86_64/percona-toolkit-3.5.4-2.el7.x86_64.rpm
# 安裝依賴并部署
yum install -y percona-toolkit-3.5.4-2.el7.x86_64.rpm
# 驗證安裝
pt-kill --version

二、核心用法:從測試到生產的完整流程

1. 測試模式:只打印不 kill(安全驗證)

先驗證規(guī)則是否正確匹配目標 SQL,避免誤殺正常業(yè)務:

# 匹配運行超過10秒的查詢,僅打印不終止
pt-kill --user=dba --password='Id81Gdac_a' \
--socket=/tmp/mysql.sock \
--busy-time=10 \  # 運行時間閾值(秒)
--interval=10 \   # 每隔10秒檢查一次
--print           # 打印匹配的SQL

測試驗證:在 MySQL 中執(zhí)行select sleep(60);,終端會輸出匹配的線程信息。

2. 執(zhí)行 kill:精準終止垃圾 SQL

確認規(guī)則無誤后,添加--kill參數(shù)執(zhí)行終止操作:

# kill運行超過10秒的查詢,并打印日志
pt-kill --user=dba --password='Id81Gdac_a' \
--socket=/tmp/mysql.sock \
--busy-time=10 \
--kill \          # 終止匹配的SQL
--print           # 同時打印被kill的SQL

此時再執(zhí)行select sleep(60);,會被立即終止,客戶端提示 “Lost connection”。

3. 后臺守護:持續(xù)監(jiān)控(生產環(huán)境必備)

讓 pt-kill 在后臺運行,持續(xù)守護數(shù)據(jù)庫:

# 后臺運行,日志輸出到指定文件
pt-kill --user=dba --password='Id81Gdac_a' \
--socket=/tmp/mysql.sock \
--busy-time=10 \
--kill \
--print \
--daemonize \     # 后臺守護進程模式
--log=/data/pt-kill.log  # 日志文件路徑

4. 進程管理:啟停與查看

# 查看后臺運行的pt-kill進程
ps -ef | grep pt-kill
# 停止進程(替換為實際PID)
kill -9 3181

三、進階技巧:精準過濾與個性化配置

1. 按用戶 / 數(shù)據(jù)庫過濾(避免誤殺核心業(yè)務)

# 只kill來自maria用戶、運行超過10秒的查詢
pt-kill --user=dba --password='Id81Gdac_a' \
--socket=/tmp/mysql.sock \
--match-user='maria' \  # 匹配指定用戶
--busy-time=10 \
--kill --print
# 只kill特定數(shù)據(jù)庫的慢查詢(例如test庫)
pt-kill --user=dba --password='Id81Gdac_a' \
--socket=/tmp/mysql.sock \
--match-db='test' \     # 匹配指定數(shù)據(jù)庫
--busy-time=10 \
--kill --print

2. 按 SQL 內容匹配(精準斬殺特定類型 SQL)

使用正則表達式匹配 SQL 關鍵詞,比如只 kill 包含sleeporder by rand()的低效查詢:

pt-kill --user=dba --password='Id81Gdac_a' \
--socket=/tmp/mysql.sock \
--match-info='(?i-xsm:sleep|order by rand)' \  # 不區(qū)分大小寫匹配
--busy-time=5 \
--kill --print

3. 報警增強:慢 SQL 實時通知(重構版功能)

原生 pt-kill 僅支持日志輸出,推薦使用 PHP 重構版(支持郵件 / 微信報警):

# 下載重構版pt-kill(含報警功能)
wget https://github.com/hcymysql/pt-kill/archive/refs/heads/master.zip
unzip master.zip && cd pt-kill-master
# 安裝依賴
yum install -y php-process php php-mysql
# 帶微信報警的后臺運行示例
php pt-kill.php -u dba -p 'Id81Gdac_a' \
-h localhost -P 3306 \
-B 10 \  # 超時閾值(秒)
--match-info='select|alter' \
--kill --weixin --daemon 1

需提前配置微信 / 郵件參數(shù)(參考腳本內說明),實現(xiàn)慢 SQL 實時推送。

四、生產環(huán)境避坑指南

  1. 權限最小化:優(yōu)先使用 MySQL 8.0 的動態(tài)權限,避免授予 SUPER 權限,降低安全風險。
  2. 避免誤殺系統(tǒng)線程:pt-kill 默認過濾復制線程等系統(tǒng)線程,但仍建議添加--ignore-user='system user'參數(shù)。
  3. 日志輪轉:長期運行需配置日志輪轉,避免日志文件過大:
# 添加到crontab,每日切割日志 
0 0 * * * mv /data/pt-kill.log /data/pt-kill.log.$(date +%Y%m%d) && touch /data/pt-kill.log
  1. 中文亂碼處理:若 SQL 包含中文字符導致工具失效,修改 pt-kill 腳本頭部:
use utf8;
use open ":encoding(utf8)", ":std";
  1. 謹慎使用 --victims=all:默認只 kill 最舊的慢查詢(--victims=oldest),使用all會終止所有匹配查詢,需評估業(yè)務影響。

結語

pt-kill 作為 MySQL 運維的 “救火神器”,核心價值在于快速止損,但更重要的是通過日志分析慢 SQL 根源,從優(yōu)化 SQL、添加索引等角度徹底解決問題。如果大家在使用中遇到權限報錯、匹配規(guī)則失效等問題,歡迎在評論區(qū)交流,我會第一時間回復!

最后附上工具官方文檔:https://docs.percona.com/percona-toolkit/pt-kill.html

以上就是MySQL運維神器pt-kill清理垃圾SQL的完整指南的詳細內容,更多關于MySQL pt-kill清理垃圾SQL的資料請關注腳本之家其它相關文章!

相關文章

  • 新手必學的mysql外鍵設置方式

    新手必學的mysql外鍵設置方式

    MySQL外鍵約束(FOREIGN KEY)用來在兩個表的數(shù)據(jù)之間建立鏈接,它可以是一列或者多列,一個表可以有一個或多個外鍵,下面這篇文章主要給大家介紹了關于mysql外鍵設置的相關資料,需要的朋友可以參考下
    2021-12-12
  • CentOS 7.2 Yum編譯安裝MySQL 5.6

    CentOS 7.2 Yum編譯安裝MySQL 5.6

    這篇文章主要為大家介紹了CentOS 7.2 Yum編譯安裝MySQL 5.6詳細代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Centos7安裝和配置Mysql5.7

    Centos7安裝和配置Mysql5.7

    網(wǎng)上關于Linux安裝mysql數(shù)據(jù)庫的教程數(shù)不勝數(shù),但是,大多教程都是漏洞百出。今天,為了幫助各位需要的人,從而寫下Centos7安裝配置mysql5.7的教程。
    2018-02-02
  • MySQL流程控制IF()、IFNULL()、NULLIF()、ISNULL()函數(shù)的使用

    MySQL流程控制IF()、IFNULL()、NULLIF()、ISNULL()函數(shù)的使用

    這篇文章介紹了MySQL流程控制IF()、IFNULL()、NULLIF()、ISNULL()函數(shù)的使用方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • 詳解MySQL中存儲函數(shù)創(chuàng)建與觸發(fā)器設置

    詳解MySQL中存儲函數(shù)創(chuàng)建與觸發(fā)器設置

    這篇文章主要為大家詳細介紹了MySQL中存儲函數(shù)的創(chuàng)建與觸發(fā)器的設置,文中的示例代碼講解詳細,具有一定的學習價值,需要的可以參考一下
    2022-08-08
  • 使用MyCat實現(xiàn)MySQL主從讀寫分離全過程

    使用MyCat實現(xiàn)MySQL主從讀寫分離全過程

    本文介紹MySQL讀寫分離原理及實現(xiàn)方式,重點講解MyCat中間件的配置與使用,涵蓋主從復制、邏輯庫路由、負載均衡等,旨在提升高并發(fā)場景下數(shù)據(jù)庫性能,降低應用與數(shù)據(jù)庫耦合度,適用于企業(yè)級架構優(yōu)化
    2025-09-09
  • MySql 5.6.36 64位綠色版安裝圖文教程

    MySql 5.6.36 64位綠色版安裝圖文教程

    這篇文章主要介紹了MySql 5.6.36 64位綠色版安裝圖文教程,需要的朋友可以參考下
    2017-05-05
  • 深入了解MySQL中聚合函數(shù)的使用

    深入了解MySQL中聚合函數(shù)的使用

    這篇文章主要為大家詳細介紹一下MySQL中聚合函數(shù)的使用,文中的示例代碼講解詳細,對我們學習MySQL有一定幫助,需要的可以參考一下
    2022-07-07
  • docker如何配置mysql主從復制

    docker如何配置mysql主從復制

    本文詳細介紹了如何在CentOS?7上配置和搭建MySQL集群,包括創(chuàng)建Docker容器、設置橋接網(wǎng)絡、配置MySQL主從復制等步驟
    2024-12-12
  • Mysql中varchar類型一些需要注意的地方

    Mysql中varchar類型一些需要注意的地方

    這篇文章主要介紹了Mysql中varchar類型一些需要注意的地方,幫助大家更好的理解和學習MySQL,感興趣的朋友可以了解下
    2021-01-01

最新評論

昭通市| 观塘区| 三原县| 丘北县| 阿城市| 黄冈市| 栾川县| 昆山市| 轮台县| 无棣县| 台北市| 宿松县| 凤冈县| 新民市| 潜山县| 黄浦区| 通山县| 孝昌县| 内乡县| 临夏县| 阿克陶县| 凤阳县| 汉川市| 灵丘县| 苏尼特右旗| 房产| 东海县| 大安市| 通化县| 虹口区| 同仁县| 呈贡县| 泸溪县| 东明县| 保亭| 安达市| 灯塔市| 通辽市| 建湖县| 贺兰县| 江北区|