MySQL執行緒用完,新連線無法連線解決

2021-09-05 08:33:14 字數 3116 閱讀 4025

問題:

mysql伺服器所支援的最大連線數是有上限的,每個連線都會占用一定的記憶體資源,因此當客戶端訪問mysql伺服器處理完相應的操作後,就應該斷開連線釋放記憶體資源。

如果伺服器有大量的閒置連線,這樣就會白白的浪費記憶體,且如果一直在累加而不斷開的話,就會達到連線上限,報"too many connections」的錯誤。可通過命令"show process list」檢視,若發現後台有大量的sleep執行緒,此時就需要調整上述引數了。

show variables like '%max_connections%';  --查詢當前連線

可以在/etc/my.cnf裡面設定資料庫的最大連線數

[mysqld]

max_connections = 1000

mysql> show status like 'threads%';

+-------------------+-------+

| variable_name     | value |

+-------------------+-------+

| threads_cached    | 58    |

| threads_connected | 57    |   ###這個數值指的是開啟的連線數

| threads_created   | 3676  |

| threads_running   | 4     |   ###這個數值指的是啟用的連線數,這個數值一般遠低於connected數值

+-------------------+-------+

mysql> show variables like '%max_connections%';

+-----------------+-------+

| variable_name   | value |

+-----------------+-------+

| max_connections | 151   |

+-----------------+-------+

1 row in set (0.00 sec)

mysql> set global max_connections=500;  --臨時修改

query ok, 0 rows affected (0.00 sec)

mysql> show variables like '%max_connections%';

+-----------------+-------+

| variable_name   | value |

+-----------------+-------+

| max_connections | 500   |

+-----------------+-------+

1 row in set (0.00 sec)

mysql> quit

threads_connected 跟show processlist結果相同,表示當前連線數。準確的來說,threads_running是代表當前併發數。

引用:

show full processlist;

殺死kill + id;

說明各列的含義和用途,

id列:乙個標識,你要kill 乙個語句的時候很有用。

user列: 顯示當前使用者,如果不是root,這個命令就只顯示你許可權範圍內的sql語句。

host列:顯示這個語句是從哪個ip 的哪個埠上發出的。可用來追蹤出問題語句的使用者。

db列:顯示這個程序目前連線的是哪個資料庫。

command列:顯示當前連線的執行的命令,一般就是休眠(sleep),查詢(query),連線(connect)。

time列:此這個狀態持續的時間,單位是秒。

state列:顯示使用當前連線的sql語句的狀態,很重要的列,後續會有所有的狀態的描述,請注意,state只是語句執行中的某乙個狀態,乙個sql語句,已查詢為例,可能需要經過copying to tmp table,sorting result,sending data等狀態才可以完成。

info列:顯示這個sql語句,因為長度有限,所以長的sql語句就顯示不全,但是乙個判斷問題語句的重要依據。

常用需要修改的引數:

1、interactive_timeout

2、wait_timeout

1.interactive_timeout

伺服器關閉互動式連線前等待活動的秒數。互動式客戶端指在mysql_real_connect()中使用client_interactive選項的客戶端。

引數預設值:28800秒(8小時)

2.wait_timeout

伺服器在關閉非互動式連線在乙個連線上等待活動的秒數。

引數預設值:28800秒(8小時)

問題:

在my.cnf中單獨修改wait_timeout,mysqld重啟後仍不生效;(widnows my.ini)

同時修改interactive_timeout和wait_timeout引數,重啟伺服器後生效。

注意:由於mysql版本問題,有的時候只需修改wait_timeout這個值。具體引數需要根據版本檢視手冊。

vs2015 連線 mysql 無法定位序數

經過坎坷,終於解決了這個問題,萬事開頭難 最近在做乙個小課題,需要在windows上連線mysql,之前都是在linux上用,不需要過多配置,直接包含mysql的標頭檔案就可使用,但是在vs上確不是那麼簡單 其實很簡單,只是要配置很多東西 所以出現了一些問題,我就重點娓娓道來 1 安裝mysql 可...

Mysql遠端無法連線

mysql遠端無法連線 一 修改 etc mysql my.conf 找到bind address 127.0.0.1這一行 直接 掉或者改為bind address 0.0.0.0即可 二 為需要遠端登入的使用者賦予許可權 1 新建使用者遠端連線mysql資料庫 grant all on to a...

mysql無法本地連線 MySQL無法本地連線

今天在gpu上安裝mysql,折騰了大半天,伺服器用的是arch系統,之前沒接觸過,遇到了不少問題,我現在從安裝開始講 在arch上安裝mysql mariadb 現在是 arch linux 官方預設的 mysql 實現。oracle mysql 已被移動到 aur,推薦所有使用者公升級 brok...