[精讚] [會員登入]
10744

[Mysql/MariaDB] 清除及設定 MySQL 的死連接

mysql 伺服器若有太多的連接,無疑的會耗用非常多的資源,若資源耗盡會影響新的連線,勢必要做一些調整

分享此文連結 //n.sfs.tw/10657

分享連結 [Mysql/MariaDB] 清除及設定 MySQL 的死連接@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-25 00:00:35 最後編修
2017-01-23 01:44:43 By 張○○
 

自動目錄

mysql 伺服器的連線的會耗用資源,例如連線數、頻寬、記憶體、cpu等。如果遇到類似惡意的阻斷式DOS/DDOS的攻擊,一下吃下太多的連線,瞬間就會使伺服器異常。

這時除了重啟以外,還有沒有別的招?

查看目前的連線

使用 show processlist 來查看目前的連線,可以查看出效能的瓶頸。

mysql> SHOW PROCESSLIST;
+-------+------+-----------------+------+---------+------+-------+------------------+
| Id    | User | Host            | db   | Command | Time | State | Info             |
+-------+------+-----------------+------+---------+------+-------+------------------+
| 14850 | axer | localhost       | NULL | Query   |    0 | NULL  | SHOW PROCESSLIST |
| 14852 | note | localhost:62258 | note | Sleep   |    0 |       | NULL             |
+-------+------+-----------------+------+---------+------+-------+------------------+
2 rows in set (0.00 sec)

若連線的方式使用 persistent 方式,操作結束時不會立刻斷連,而會進入 Sleep 狀態

其中 Sleep 就是作完動作尚未 timeout 的連線,這時另一個欄位 Time 代表他 "sleep" 的時間,以上例而言為0 代表剛睡而已。如果要殺掉那個程序,就下指令

mysql> kill 14852;

查看及修改等待結束的時間

我們可以查看預設的連線時間,變數 wait_timeout:

mysql> show variables like '%timeout%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 3600     |
| wait_timeout                | 28800    |
+-----------------------------+----------+
12 rows in set (0.00 sec)

 

預設是 28800 秒,真是驚人,那表示如果你的存取方式是permanent的連線狀態,一旦建立完沒有手動結束的話,他會一直睡到28800秒才會關閉,也就是約8個小時。這個值不要設太小,否則遇到比較耗時的查詢,還來不及查完就出現MySQL has gone away的錯誤。

依我的經驗180秒很足夠

執行期修改,設定為180秒

mysql> set wait_timeout=180;

永久設定

修改 /etc/my.cnf

[mysqld]
wait_timeout=180

重啟後生效


原文 2010-03-17 00:31:07

END

你可能感興趣的文章

[Mysql] 修改欄位的自動索引值autoindex (auto_increment ) Mysql 新增、刪除、修改、查看欄位的自動索引值autoindex (auto_increment)

[Mysql/MariaDB] 表格的引擎 (engine):查看及修改 MySQL表格引擎預設為 MyISAM,但在4.0以上的mysql 其實支援不只一種引擎,各有優缺點,這篇介紹引擎的操作。

[Mysql/MariaDB] 使用Memory引擎修改及設定最大值的方法 Mysql/MariaDB 使用Memory引擎預設是16MB,修改及設定最大值的方法。

[MySQL/Mariadb] 正規表達式(regular express) mysql的正規表達式很詭異,很不能接受

[Mysql/Mariadb] Left Join 和 Right Join 合併表單 SQL語法中的 Left Join 和 Right Join 很常用,但是我常會忘記,所以寫下來備忘。

[Mysql/Mariadb] 建立使用者及資料庫 Mysql/Mariadb建立使用者、刪除使用者、給予權限、建立資料庫

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[CodeIgniter3] 解決無法上傳特定檔案(.sb2)的問題 上傳時出現The filetype you are attempting to upload is not allowed,要怎麼解決?

NETCRAFT發現你的網站及作業系統 NETCRAFT可以發現你的網站及作業系統

「許功蓋」的字以及源由 有玩過電腦一段時間的人,都聽過這個人(有一天我才發現7年級的竟然都不認識這個

[MAC] 安裝APACHE+PHP OS Darwin OpenIDMac1deAir 15.6.0 Darwin Kernel Version 15.6.

[AS3] FLASH 引入外部as檔 FLASH AS3中,若要引用另外撰寫的 class(*.as) 檔案,該如何處理?