[nodejs]解決mysql和串連池(pool)自動斷開問題

來源:互聯網
上載者:User

最近在做一個個人項目,資料庫嘗試使用了mongodb、sqlite和mysql。分享一下關於mysql的串連池用法。項目部署於appfog,項目中我使用串連池連結資料庫,本地測試一切正常。上線以後,經過幾次請求兩個資料介面總是報503。一直不明就裡,今天經過一番排查終於順利解決了。   1.mysql 連結普通模式   mysql的普通用法如下所示: 複製代碼  var mysql = require('mysql'),      env = {        host : 'localhost',        user : 'root',        password : '2212',        database : 'image_marker'      };     db = mysql.createConnection(env);    db.connect();     exports.do = function (sql, callback) {       db.query(sql, callback);     } 複製代碼MySQL中有一個名叫wait_timeout的變數,表示操作逾時時間,當串連超過一定時間沒有活動後,會自動關閉該串連,這個值預設為28800(即8小時)。關於普通用法連結丟失後重新連結,請看這裡 傳送門   2.使用串連池 之前我的錯誤碼,官網上只給出了串連池用法,但是沒有給出和請求結合的執行個體。由於欠缺經驗,我認為多個請求使用一個connection比較節省資源。後面發現,connetion經過一段時間後會自動斷開,這樣問題就出現了。 複製代碼pool.getConnection(function (err, connection){    exports.do = function (sql, callback){                connection.query(sql, function (){            callback.apply(connection, arguments);            connection.release();        });    }})複製代碼google/baidu後發現了一個使用pool的執行個體   發現他的代碼每一次請求都用pool建立一個connection,改進My Code終於解決了一段時間後connection自動斷開的問題。   正確代碼為 複製代碼pool  = mysql.createPool(env);     exports.do = function (sql, callback){        this.getConnection(function (err, connection){            connection.query(sql, function (){                callback.apply(connection, arguments);                connection.release();            });        })    }.bind(pool)複製代碼為每一個請求都建立一個connection使用完後調用connection.release(); 直接釋放資源。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.