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

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

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

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

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

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

1. 基礎(chǔ)權(quán)限配置(兼容 MySQL 5.7/8.0)

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

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

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

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

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

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

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

二、核心用法:從測試到生產(chǎn)的完整流程

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

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

# 匹配運行超過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:精準(zhǔn)終止垃圾 SQL

確認(rèn)規(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)控(生產(chǎ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 \     # 后臺守護進(jìn)程模式
--log=/data/pt-kill.log  # 日志文件路徑

4. 進(jìn)程管理:啟停與查看

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

三、進(jìn)階技巧:精準(zhǔn)過濾與個性化配置

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

# 只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 內(nèi)容匹配(精準(zhǔn)斬殺特定類型 SQL)

使用正則表達(dá)式匹配 SQL 關(guān)鍵詞,比如只 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 實時通知(重構(gòu)版功能)

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

# 下載重構(gòu)版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ù)(參考腳本內(nèi)說明),實現(xiàn)慢 SQL 實時推送。

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

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

結(jié)語

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

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

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

相關(guān)文章

  • 新手必學(xué)的mysql外鍵設(shè)置方式

    新手必學(xué)的mysql外鍵設(shè)置方式

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

    CentOS 7.2 Yum編譯安裝MySQL 5.6

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

    Centos7安裝和配置Mysql5.7

    網(wǎng)上關(guān)于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ù)的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • 詳解MySQL中存儲函數(shù)創(chuàng)建與觸發(fā)器設(shè)置

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

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

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

    本文介紹MySQL讀寫分離原理及實現(xiàn)方式,重點講解MyCat中間件的配置與使用,涵蓋主從復(fù)制、邏輯庫路由、負(fù)載均衡等,旨在提升高并發(fā)場景下數(shù)據(jù)庫性能,降低應(yīng)用與數(shù)據(jù)庫耦合度,適用于企業(yè)級架構(gòu)優(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ù)的使用

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

    docker如何配置mysql主從復(fù)制

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

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

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

最新評論

赤水市| 平度市| 霍邱县| 夏津县| 安国市| 孟津县| 中江县| 富民县| 凤山市| 根河市| 建宁县| 泰兴市| 寿宁县| 朝阳县| 仙居县| 绥阳县| 辉县市| 鹤峰县| 洛阳市| 怀远县| 大安市| 西贡区| 得荣县| 栾川县| 肃南| 修文县| 台前县| 巢湖市| 教育| 思茅市| 上林县| 容城县| 曲靖市| 海伦市| 教育| 武鸣县| 鄂托克旗| 庆安县| 广宁县| 黎川县| 玛纳斯县|