人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

MySQL 查看鏈接及殺掉異常鏈接的方法

發(fā)布日期:2022-02-19 16:42 | 文章來源:源碼之家

在數(shù)據(jù)庫運維過程中,我們時常會關(guān)注數(shù)據(jù)庫的鏈接情況,比如總共有多少鏈接、有多少活躍鏈接、有沒有執(zhí)行時間過長的鏈接等。數(shù)據(jù)庫的各種異常也能通過鏈接情況間接反應(yīng)出來,特別是數(shù)據(jù)庫出現(xiàn)死鎖或嚴(yán)重卡頓的時候,我們首先應(yīng)該查看數(shù)據(jù)庫是否有異常鏈接,并殺掉這些異常鏈接。本篇文章將主要介紹如何查看數(shù)據(jù)庫鏈接及如何殺掉異常鏈接的方法。

1.查看數(shù)據(jù)庫鏈接

查看數(shù)據(jù)庫鏈接最常用的語句就是 show processlist 了,這條語句可以查看數(shù)據(jù)庫中存在的線程狀態(tài)。普通用戶只可以查看當(dāng)前用戶發(fā)起的鏈接,具有 PROCESS 全局權(quán)限的用戶則可以查看所有用戶的鏈接。

show processlist 結(jié)果中的 Info 字段僅顯示每個語句的前 100 個字符,如果需要顯示更多信息,可以使用 show full processlist 。同樣的,查看 information_schema.processlist 表也可以看到數(shù)據(jù)庫鏈接狀態(tài)信息。

#普通用戶只能看到當(dāng)前用戶發(fā)起的鏈接
mysql>selectuser();
+--------------------+
|user()|
+--------------------+
|testuser@localhost|
+--------------------+
1rowinset(0.00sec)
mysql>showgrants;
+----------------------------------------------------------------------+
|Grantsfortestuser@%|
+----------------------------------------------------------------------+
|GRANTUSAGEON*.*TO'testuser'@'%'|
|GRANTSELECT,INSERT,UPDATE,DELETEON`testdb`.*TO'testuser'@'%'|
+----------------------------------------------------------------------+
2rowsinset(0.00sec)
mysql>showprocesslist;
+--------+----------+-----------+--------+---------+------+----------+------------------+
|Id|User|Host|db|Command|Time|State|Info|
+--------+----------+-----------+--------+---------+------+----------+------------------+
|769386|testuser|localhost|NULL|Sleep|201||NULL|
|769390|testuser|localhost|testdb|Query|0|starting|showprocesslist|
+--------+----------+-----------+--------+---------+------+----------+------------------+
2rowsinset(0.00sec)
mysql>select*frominformation_schema.processlist;
+--------+----------+-----------+--------+---------+------+-----------+----------------------------------------------+
|ID|USER|HOST|DB|COMMAND|TIME|STATE|INFO|
+--------+----------+-----------+--------+---------+------+-----------+----------------------------------------------+
|769386|testuser|localhost|NULL|Sleep|210||NULL|
|769390|testuser|localhost|testdb|Query|0|executing|select*frominformation_schema.processlist|
+--------+----------+-----------+--------+---------+------+-----------+----------------------------------------------+
2rowsinset(0.00sec)
#授予了PROCESS權(quán)限后,可以看到所有用戶的鏈接
mysql>grantprocesson*.*to'testuser'@'%';
QueryOK,0rowsaffected(0.01sec)
mysql>flushprivileges;
QueryOK,0rowsaffected(0.00sec)
mysql>showgrants;
+----------------------------------------------------------------------+
|Grantsfortestuser@%|
+----------------------------------------------------------------------+
|GRANTPROCESSON*.*TO'testuser'@'%'|
|GRANTSELECT,INSERT,UPDATE,DELETEON`testdb`.*TO'testuser'@'%'|
+----------------------------------------------------------------------+
2rowsinset(0.00sec)
mysql>showprocesslist;
+--------+----------+--------------------+--------+---------+------+----------+------------------+
|Id|User|Host|db|Command|Time|State|Info|
+--------+----------+--------------------+--------+---------+------+----------+------------------+
|769347|root|localhost|testdb|Sleep|53||NULL|
|769357|root|192.168.85.0:61709|NULL|Sleep|521||NULL|
|769386|testuser|localhost|NULL|Sleep|406||NULL|
|769473|testuser|localhost|testdb|Query|0|starting|showprocesslist|
+--------+----------+--------------------+--------+---------+------+----------+------------------+
4rowsinset(0.00sec)

通過 show processlist 所得結(jié)果,我們可以清晰了解各線程鏈接的詳細(xì)信息。具體字段含義還是比較容易理解的,下面具體來解釋下各個字段代表的意思:

  • Id:就是這個鏈接的唯一標(biāo)識,可通過 kill 命令,加上這個Id值將此鏈接殺掉。
  • User:就是指發(fā)起這個鏈接的用戶名。
  • Host:記錄了發(fā)送請求的客戶端的 IP 和 端口號,可以定位到是哪個客戶端的哪個進(jìn)程發(fā)送的請求。
  • db:當(dāng)前執(zhí)行的命令是在哪一個數(shù)據(jù)庫上。如果沒有指定數(shù)據(jù)庫,則該值為 NULL 。
  • Command:是指此刻該線程鏈接正在執(zhí)行的命令。
  • Time:表示該線程鏈接處于當(dāng)前狀態(tài)的時間。
  • State:線程的狀態(tài),和 Command 對應(yīng)。
  • Info:記錄的是線程執(zhí)行的具體語句。

當(dāng)數(shù)據(jù)庫鏈接數(shù)過多時,篩選有用信息又成了一件麻煩事,比如我們只想查某個用戶或某個狀態(tài)的鏈接。這個時候用 show processlist 則會查找出一些我們不需要的信息,此時使用 information_schema.processlist 進(jìn)行篩選會變得容易許多,下面展示幾個常見篩選需求:

#只查看某個ID的鏈接信息
select*frominformation_schema.processlistwhereid=705207;
#篩選出某個用戶的鏈接
select*frominformation_schema.processlistwhereuser='testuser';
#篩選出所有非空閑的鏈接
select*frominformation_schema.processlistwherecommand!='Sleep';
#篩選出空閑時間在600秒以上的鏈接
select*frominformation_schema.processlistwherecommand='Sleep'andtime>600;
#篩選出處于某個狀態(tài)的鏈接
select*frominformation_schema.processlistwherestate='Sendingdata';
#篩選某個客戶端IP的鏈接
select*frominformation_schema.processlistwherehostlike'192.168.85.0%';

2.殺掉數(shù)據(jù)庫鏈接

如果某個數(shù)據(jù)庫鏈接異常,我們可以通過 kill 語句來殺掉該鏈接,kill 標(biāo)準(zhǔn)語法是:KILL [CONNECTION | QUERY] processlist_id;

KILL 允許使用可選的 CONNECTION 或 QUERY 修飾符:

  • KILL CONNECTION 與不含修改符的 KILL 一樣,它會終止該 process 相關(guān)鏈接。
  • KILL QUERY 終止鏈接當(dāng)前正在執(zhí)行的語句,但保持鏈接本身不變。

殺掉鏈接的能力取決于 SUPER 權(quán)限:

  • 如果沒有 SUPER 權(quán)限,則只能殺掉當(dāng)前用戶發(fā)起的鏈接。
  • 具有 SUPER 權(quán)限的用戶,可以殺掉所有鏈接。

遇到突發(fā)情況,需要批量殺鏈接時,可以通過拼接 SQL 得到 kill 語句,然后再執(zhí)行,這樣會方便很多,分享幾個可能用到的殺鏈接的 SQL :

#殺掉空閑時間在600秒以上的鏈接,拼接得到kill語句
selectconcat('KILL',id,';')frominformation_schema.`processlist`
wherecommand='Sleep'andtime>600;
#殺掉處于某個狀態(tài)的鏈接,拼接得到kill語句
selectconcat('KILL',id,';')frominformation_schema.`processlist`
wherestate='Sendingdata';
selectconcat('KILL',id,';')frominformation_schema.`processlist`
wherestate='Waitingfortablemetadatalock';
#殺掉某個用戶發(fā)起的鏈接,拼接得到kill語句
selectconcat('KILL',id,';')frominformation_schema.`processlist`
user='testuser';

這里提醒下,kill 語句一定要慎用!特別是此鏈接執(zhí)行的是更新語句或表結(jié)構(gòu)變動語句時,殺掉鏈接可能需要比較長時間的回滾操作。

總結(jié):

本篇文章講解了查看及殺掉數(shù)據(jù)庫鏈接的方法,以后懷疑數(shù)據(jù)庫有問題,可以第一時間看下數(shù)據(jù)庫鏈接情況。

以上就是MySQL 查看鏈接及殺掉異常鏈接的方法的詳細(xì)內(nèi)容,更多關(guān)于MySQL 查看鏈接及殺掉異常鏈接的資料請關(guān)注本站其它相關(guān)文章!

美國穩(wěn)定服務(wù)器

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部