[Nodejs] 解決MySQL Error: Connection lost. The server closed the connection的方法
定時斷線若無跡可尋真的很令人頭大
最近在幫朋友使用 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
問題了。