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

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

 更新時間:2021年02月07日 15:10:02   作者:MySQL技術(shù)  
這篇文章主要介紹了MySQL 查看鏈接及殺掉異常鏈接的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下

前言: 

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

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

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

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

# 普通用戶只能看到當前用戶發(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)

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

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

當數(shù)據(jù)庫鏈接數(shù)過多時,篩選有用信息又成了一件麻煩事,比如我們只想查某個用戶或某個狀態(tài)的鏈接。這個時候用 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;

# 篩選出處于某個狀態(tài)的鏈接
select * from information_schema.processlist where state = 'Sending data';

# 篩選某個客戶端IP的鏈接
select * from information_schema.processlist where host like '192.168.85.0%';

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

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

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

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

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

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

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

# 殺掉空閑時間在600秒以上的鏈接,拼接得到kill語句
select concat('KILL ',id,';') from information_schema.`processlist` 
where command = 'Sleep' and time > 600;

# 殺掉處于某個狀態(tài)的鏈接,拼接得到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';

# 殺掉某個用戶發(fā)起的鏈接,拼接得到kill語句
select concat('KILL ',id,';') from information_schema.`processlist` 
 user = 'testuser';

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

總結(jié): 

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

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

相關(guān)文章

  • mysql8.0找不到my.ini配置文件的問題及解決

    mysql8.0找不到my.ini配置文件的問題及解決

    這篇文章主要介紹了mysql8.0找不到my.ini配置文件的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • MySQL保證數(shù)據(jù)不丟失的方案詳解

    MySQL保證數(shù)據(jù)不丟失的方案詳解

    MySQL作為一個存儲數(shù)據(jù)的產(chǎn)品,怎么確保數(shù)據(jù)的持久性和不丟失才是最重要的,感興趣的可以跟隨本文一探究竟,文中通過圖文結(jié)合給大家講解的非常詳細,需要的朋友快來跟著小編一起來學習吧
    2023-12-12
  • 年底了,你的mysql密碼安全嗎

    年底了,你的mysql密碼安全嗎

    這篇文章主要介紹了MySQL密碼安全的相關(guān)知識,幫助大家更好的使用數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-01-01
  • MySQL的ORDER BY及優(yōu)化過程詳解

    MySQL的ORDER BY及優(yōu)化過程詳解

    在MySQL中,索引的最左匹配原則是指在使用索引進行查詢時,會優(yōu)先匹配索引的最左側(cè)列,然后再匹配后續(xù)列,本文將基于InnoDB引擎,詳細分析如何優(yōu)化MySQL索引最左匹配下的ORDER BY語句,需要的朋友可以參考下
    2024-07-07
  • 一文深入探討MySQL是如何解決幻讀問題

    一文深入探討MySQL是如何解決幻讀問題

    SQL標準中定義了4種隔離級別,分別是讀未提交、讀已提交、可重復讀以及序列化。不同的隔離級別下,本文將重點探討下MySQL是如何解決幻讀問題的,需要的朋友可以跟著小編一起來探討一下
    2023-07-07
  • MySQL獲取數(shù)據(jù)庫內(nèi)所有表格數(shù)據(jù)總數(shù)的示例代碼

    MySQL獲取數(shù)據(jù)庫內(nèi)所有表格數(shù)據(jù)總數(shù)的示例代碼

    在 MySQL 中,要獲取數(shù)據(jù)庫內(nèi)所有表格的數(shù)據(jù)總數(shù),可以編寫一個查詢腳本來遍歷每個表并計算其行數(shù),所以本文給大家介紹了MySQL獲取數(shù)據(jù)庫內(nèi)所有表格數(shù)據(jù)總數(shù)的示例,需要的朋友可以參考下
    2024-11-11
  • MySQL連接控制插件介紹

    MySQL連接控制插件介紹

    當連接數(shù)據(jù)庫失敗次數(shù)過多時,MySQL 是否會限制登錄呢?數(shù)據(jù)庫服務端應該怎么應對暴力破解呢?本篇文章介紹下 MySQL 中的連接控制插件,一起來學習下此插件的作用,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • mysql中的int類型對應于java中的Long類型詳解

    mysql中的int類型對應于java中的Long類型詳解

    這篇文章主要介紹了mysql中的int類型對應于java中的Long類型,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 詳解 Mysql 事務和Mysql 日志

    詳解 Mysql 事務和Mysql 日志

    這篇文章主要介紹了詳解 Mysql 事務和Mysql 日志的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-08-08
  • MySQL的?DDL和DML和DQL的基本語法詳解

    MySQL的?DDL和DML和DQL的基本語法詳解

    SQL語句,即結(jié)構(gòu)化查詢語言(Structured?Query?Language),是一種特殊目的的編程語言,是一種數(shù)據(jù)庫查詢和程序設(shè)計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng),這篇文章主要介紹了MySQL的?DDL和DML和DQL的基本語法,需要的朋友可以參考下
    2022-07-07

最新評論

墨竹工卡县| 巴东县| 邹平县| 沅陵县| 综艺| 哈尔滨市| 蒲江县| 孟津县| 汝南县| 三原县| 合作市| 方正县| 涟源市| 晋江市| 汝南县| 彝良县| 彭水| 墨江| 景洪市| 八宿县| 运城市| 长泰县| 通榆县| 临颍县| 上饶县| 江永县| 凤台县| 漳州市| 山丹县| 云浮市| 攀枝花市| 白玉县| 册亨县| 台安县| 多伦县| 沧州市| 罗江县| 扶沟县| 博爱县| 综艺| 平乡县|