久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL中怎么查看鏈接

133次閱讀
沒有評論

共計 5209 個字符,預計需要花費 14 分鐘才能閱讀完成。

今天就跟大家聊聊有關 MySQL 中怎么查看鏈接,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1. 查看數據庫鏈接

查看數據庫鏈接最常用的語句就是 show processlist 了,這條語句可以查看數據庫中存在的線程狀態。普通用戶只可以查看當前用戶發起的鏈接,具有  PROCESS 全局權限的用戶則可以查看所有用戶的鏈接。

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

#  普通用戶只能看到當前用戶發起的鏈接  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 權限后,可以看到所有用戶的鏈接  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)

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

Id:就是這個鏈接的唯一標識,可通過 kill 命令,加上這個 Id 值將此鏈接殺掉。

User:就是指發起這個鏈接的用戶名。

Host:記錄了發送請求的客戶端的 IP 和 端口號,可以定位到是哪個客戶端的哪個進程發送的請求。

db:當前執行的命令是在哪一個數據庫上。如果沒有指定數據庫,則該值為 NULL。

Command:是指此刻該線程鏈接正在執行的命令。

Time:表示該線程鏈接處于當前狀態的時間。

State:線程的狀態,和 Command 對應。

Info:記錄的是線程執行的具體語句。

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

#  只查看某個 ID 的鏈接信息  select * from information_schema.processlist where id = 705207; #  篩選出某個用戶的鏈接  select * from information_schema.processlist where user =  testuser  #  篩選出所有非空閑的鏈接  select * from information_schema.processlist where command !=  Sleep  #  篩選出空閑時間在 600 秒以上的鏈接  select * from information_schema.processlist where command =  Sleep  and time   600; #  篩選出處于某個狀態的鏈接  select * from information_schema.processlist where state =  Sending data  #  篩選某個客戶端 IP 的鏈接  select * from information_schema.processlist where host like  192.168.85.0%

2. 殺掉數據庫鏈接

如果某個數據庫鏈接異常,我們可以通過 kill 語句來殺掉該鏈接,kill 標準語法是:KILL [CONNECTION | QUERY]  processlist_id;

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

KILL CONNECTION 與不含修改符的 KILL 一樣,它會終止該 process 相關鏈接。

KILL QUERY 終止鏈接當前正在執行的語句,但保持鏈接本身不變。

殺掉鏈接的能力取決于 SUPER 權限:

如果沒有 SUPER 權限,則只能殺掉當前用戶發起的鏈接。

具有 SUPER 權限的用戶,可以殺掉所有鏈接。

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

#  殺掉空閑時間在 600 秒以上的鏈接,拼接得到 kill 語句  select concat(KILL  ,id,) from information_schema.`processlist` where command =  Sleep  and time   600; #  殺掉處于某個狀態的鏈接,拼接得到 kill 語句  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  #  殺掉某個用戶發起的鏈接,拼接得到 kill 語句  select concat(KILL  ,id,) from information_schema.`processlist` user =  testuser

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

看完上述內容,你們對 MySQL 中怎么查看鏈接有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業資訊頻道,感謝大家的支持。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計5209字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 马鞍山市| 望奎县| 城步| 郑州市| 峡江县| 扬州市| 隆昌县| 勐海县| 长治市| 阿拉善右旗| 云龙县| 石家庄市| 梁山县| 柘城县| 苏州市| 钟祥市| 涪陵区| 西昌市| 惠州市| 四川省| 原平市| 千阳县| 苏尼特左旗| 工布江达县| 长宁县| 泸定县| 宣城市| 河津市| 华阴市| 尉氏县| 丹巴县| 济南市| 砀山县| 石家庄市| 定边县| 花莲县| 肃宁县| 潮州市| 青河县| 沁源县| 无锡市|