mysql超時機制
mysql每次建立一個socket連接(connect)時,這個socket都會占用一定內存。即使你關閉(close)連接時,並不是真正的關閉,而是處於睡眠(sleep)狀態。
當你下次再進行連接時,就可以快速啟動當前處於睡眠狀態的socket。但是過多的socket會占用大量的內存,為解決這個問題,mysql有個超時機制。
你可以使用這條語句查看當前設置的超時時間長度:
show global variables like ‘wait_timeout‘;
得到的結果如下:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.00 sec)
默認是28800秒,也就是8小時
wait_timeout參數的作用:當一個閑置的連接超過8小時後,該連接就會斷開。
但是有時候需要長時間開啟mysql連接,就需要改變這個參數的值。根據機器的硬件選擇合適的參數值。
有兩種方法可以改變這個參數的值:
1.通過語句改變這個參數的值。這中方法不需要重啟mysql,但會先斷開所有當前連接,然後重新連接。
語句:set global wait_timeout = 100;執行結果:
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 3
Current database: *** NONE ***
Query OK, 0 rows affected (1.13 sec)
最後一行表示已經更改成功。
註:這個方法是局部性質的。當你下次重新啟動mysql服務器時,執行show global variables like ‘wait_timeout‘;時,仍然是修改前的值。
2.通過修改配置文件
在mysql的安裝目錄下,有個mysql.ini文件
添加如下的設置:
[mysqlld]
wait_timeout = 100
interactive_timeout = 100
然後重啟mysql服務,更改就會生效。
註:這個參數的含義:
wait_timeout:mysql服務器關閉非交互式連接之前等待活動的秒數
interactive_timeout:mysql服務器關閉交互式連接之前等待活動的秒數
mysql超時機制