[Nodejs] 解決MySQL Error: Connection lost. The server closed the connection的方法

定時斷線若無跡可尋真的很令人頭大

Les Lee
一個小小工程師的隨手筆記
2 min readNov 1, 2018

--

最近在幫朋友使用 nodeJs 架測試用伺服器時發生一件令我困擾萬分的問題。

那就是,我的nodeJs Server 所連接的 mysql 資料庫大約在幾個小時後就會自動斷線,使 nodeJs Server 拋出一個 PROTOCOL_CONNECTION_LOST的Exception。

MySQL Error: Connection lost. The server closed the connection

我一開始以為是自己的程式程式問題,千測萬測找不出原因來。之後在網路上查找,才知道原來是因為 MySQL 本身有一個機制:wait_time。當超超過這個時間的時候便會 connection lost. 這時,再去 request MySQL 時便會連接不上 MySQL。

解決方法網路上查到有兩種

第一種方法:在偵測到拋出 PROTOCOL_CONNECTION_LOST 時就重新執行連線。

在偵測到拋出 PROTOCOL_CONNECTION_LOST 時就重新執行連線。我們可以把這封裝成一個 module,在需要的地方使用。要注意的是,在使用 conn 時,不可以將其設為 global variable,不然無法得到更新的 conn

第二種方法:使用Connection pool

使用Connection pool。當需要 connection 時,從 connection pool 拿取連線即可。

程式碼大約如下:

一樣將此封裝成一個 module,並且在想使用的地方使用。

我後來選擇了第二種方式,並且封裝成一個 middleware。大約類似如此方式使用:

app.use(function (req, res, next) {
req.query = mysqlPoolQuery;
next();
});

如此一來就順利解決了 mySQL 的 connection closed 問題了。

--

--

Les Lee
Les Lee

Written by Les Lee

對新事物總是興緻勃勃、嘗試新技術、解決新挑戰; 也時常陷入許多無謂的思索,卡在其中得不出答案。

Responses (1)