今天就跟大家聊聊有關(guān)MySQL中怎么查看鏈接,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)公司是一家專業(yè)提供耿馬企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、HTML5建站、小程序制作等業(yè)務(wù)。10年已為耿馬眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
1.查看數(shù)據(jù)庫(kù)鏈接
查看數(shù)據(jù)庫(kù)鏈接最常用的語(yǔ)句就是 show processlist 了,這條語(yǔ)句可以查看數(shù)據(jù)庫(kù)中存在的線程狀態(tài)。普通用戶只可以查看當(dāng)前用戶發(fā)起的鏈接,具有 PROCESS 全局權(quán)限的用戶則可以查看所有用戶的鏈接。
show processlist 結(jié)果中的 Info 字段僅顯示每個(gè)語(yǔ)句的前 100 個(gè)字符,如果需要顯示更多信息,可以使用 show full processlist 。同樣的,查看 information_schema.processlist 表也可以看到數(shù)據(jù)庫(kù)鏈接狀態(tài)信息。
# 普通用戶只能看到當(dāng)前用戶發(fā)起的鏈接 mysql> select user(); +--------------------+ | user() | +--------------------+ | testuser@localhost | +--------------------+ 1 row in set (0.00 sec) mysql> show grants; +----------------------------------------------------------------------+ | Grants for testuser@% | +----------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'testuser'@'%' | | GRANT SELECT, INSERT, UPDATE, DELETE ON `testdb`.* TO 'testuser'@'%' | +----------------------------------------------------------------------+ 2 rows in set (0.00 sec) mysql> show processlist; +--------+----------+-----------+--------+---------+------+----------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +--------+----------+-----------+--------+---------+------+----------+------------------+ | 769386 | testuser | localhost | NULL | Sleep | 201 | | NULL | | 769390 | testuser | localhost | testdb | Query | 0 | starting | show processlist | +--------+----------+-----------+--------+---------+------+----------+------------------+ 2 rows in set (0.00 sec) mysql> select * from information_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 * from information_schema.processlist | +--------+----------+-----------+--------+---------+------+-----------+----------------------------------------------+ 2 rows in set (0.00 sec) # 授予了PROCESS權(quán)限后,可以看到所有用戶的鏈接 mysql> grant process on *.* to 'testuser'@'%'; Query OK, 0 rows affected (0.01 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> show grants; +----------------------------------------------------------------------+ | Grants for testuser@% | +----------------------------------------------------------------------+ | GRANT PROCESS ON *.* TO 'testuser'@'%' | | GRANT SELECT, INSERT, UPDATE, DELETE ON `testdb`.* TO 'testuser'@'%' | +----------------------------------------------------------------------+ 2 rows in set (0.00 sec) mysql> show processlist; +--------+----------+--------------------+--------+---------+------+----------+------------------+ | 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 | show processlist | +--------+----------+--------------------+--------+---------+------+----------+------------------+ 4 rows in set (0.00 sec)
通過(guò) show processlist 所得結(jié)果,我們可以清晰了解各線程鏈接的詳細(xì)信息。具體字段含義還是比較容易理解的,下面具體來(lái)解釋下各個(gè)字段代表的意思:
Id:就是這個(gè)鏈接的唯一標(biāo)識(shí),可通過(guò) kill 命令,加上這個(gè)Id值將此鏈接殺掉。
User:就是指發(fā)起這個(gè)鏈接的用戶名。
Host:記錄了發(fā)送請(qǐng)求的客戶端的 IP 和 端口號(hào),可以定位到是哪個(gè)客戶端的哪個(gè)進(jìn)程發(fā)送的請(qǐng)求。
db:當(dāng)前執(zhí)行的命令是在哪一個(gè)數(shù)據(jù)庫(kù)上。如果沒有指定數(shù)據(jù)庫(kù),則該值為 NULL 。
Command:是指此刻該線程鏈接正在執(zhí)行的命令。
Time:表示該線程鏈接處于當(dāng)前狀態(tài)的時(shí)間。
State:線程的狀態(tài),和 Command 對(duì)應(yīng)。
Info:記錄的是線程執(zhí)行的具體語(yǔ)句。
當(dāng)數(shù)據(jù)庫(kù)鏈接數(shù)過(guò)多時(shí),篩選有用信息又成了一件麻煩事,比如我們只想查某個(gè)用戶或某個(gè)狀態(tài)的鏈接。這個(gè)時(shí)候用 show processlist 則會(huì)查找出一些我們不需要的信息,此時(shí)使用 information_schema.processlist 進(jìn)行篩選會(huì)變得容易許多,下面展示幾個(gè)常見篩選需求:
# 只查看某個(gè)ID的鏈接信息 select * from information_schema.processlist where id = 705207; # 篩選出某個(gè)用戶的鏈接 select * from information_schema.processlist where user = 'testuser'; # 篩選出所有非空閑的鏈接 select * from information_schema.processlist where command != 'Sleep'; # 篩選出空閑時(shí)間在600秒以上的鏈接 select * from information_schema.processlist where command = 'Sleep' and time > 600; # 篩選出處于某個(gè)狀態(tài)的鏈接 select * from information_schema.processlist where state = 'Sending data'; # 篩選某個(gè)客戶端IP的鏈接 select * from information_schema.processlist where host like '192.168.85.0%';
2.殺掉數(shù)據(jù)庫(kù)鏈接
如果某個(gè)數(shù)據(jù)庫(kù)鏈接異常,我們可以通過(guò) kill 語(yǔ)句來(lái)殺掉該鏈接,kill 標(biāo)準(zhǔn)語(yǔ)法是:KILL [CONNECTION | QUERY] processlist_id;
KILL 允許使用可選的 CONNECTION 或 QUERY 修飾符:
KILL CONNECTION 與不含修改符的 KILL 一樣,它會(huì)終止該 process 相關(guān)鏈接。
KILL QUERY 終止鏈接當(dāng)前正在執(zhí)行的語(yǔ)句,但保持鏈接本身不變。
殺掉鏈接的能力取決于 SUPER 權(quán)限:
如果沒有 SUPER 權(quán)限,則只能殺掉當(dāng)前用戶發(fā)起的鏈接。
具有 SUPER 權(quán)限的用戶,可以殺掉所有鏈接。
遇到突發(fā)情況,需要批量殺鏈接時(shí),可以通過(guò)拼接 SQL 得到 kill 語(yǔ)句,然后再執(zhí)行,這樣會(huì)方便很多,分享幾個(gè)可能用到的殺鏈接的 SQL :
# 殺掉空閑時(shí)間在600秒以上的鏈接,拼接得到kill語(yǔ)句 select concat('KILL ',id,';') from information_schema.`processlist` where command = 'Sleep' and time > 600; # 殺掉處于某個(gè)狀態(tài)的鏈接,拼接得到kill語(yǔ)句 select concat('KILL ',id,';') from information_schema.`processlist` where state = 'Sending data'; select concat('KILL ',id,';') from information_schema.`processlist` where state = 'Waiting for table metadata lock'; # 殺掉某個(gè)用戶發(fā)起的鏈接,拼接得到kill語(yǔ)句 select concat('KILL ',id,';') from information_schema.`processlist` user = 'testuser';
這里提醒下,kill 語(yǔ)句一定要慎用!特別是此鏈接執(zhí)行的是更新語(yǔ)句或表結(jié)構(gòu)變動(dòng)語(yǔ)句時(shí),殺掉鏈接可能需要比較長(zhǎng)時(shí)間的回滾操作。
看完上述內(nèi)容,你們對(duì)MySQL中怎么查看鏈接有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
網(wǎng)站標(biāo)題:MySQL中怎么查看鏈接
網(wǎng)頁(yè)地址:http://aaarwkj.com/article4/ggpjoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、品牌網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、建站公司、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)