2015-04-25 252 views
1

當我試圖連接到服務器上的MySQL數據庫時,我始終得到SequelizeConnectionRefusedError無法通過Sequelize連接到MySQL

登錄憑證是正確的,端口是開放的,一切似乎都很好(並且在開發環境中的功能就像是魅力一樣)。

對不起,由於缺乏背景信息,但我在這裏傻眼了 - 我真的不知道是什麼原因導致了這個問題。

這是mysql --version

mysql Ver 14.14 Distrib 5.5.43, for debian-linux-gnu (x86_64) using readline 6.3 

我輸出這是我使用初始化Sequelize代碼。我希望它使用的表格尚不存在,但我相當確定,這個問題沒有任何關係。我試着用root用戶登錄,但沒有骰子 - 我仍然得到相同的錯誤。

var sequelize = new Sequelize("database", username, password, { 
    host: "localhost", 
    dialect: "mysql", 
    port: 3306, 
    define: { 
     paranoid: true 
    } 
}); 

var Model = sequelize.define("Model", { 
    md5: {type: Sequelize.STRING(128)}, 
    ip: {type: Sequelize.STRING(256)}, 
    url: {type: Sequelize.STRING(1024)} 
}); 

sequelize.sync(); 

這是在Ubuntu 14.04,其中節點被後面乘客運行(儘管如果我與節點運行該應用程序直接以及出現錯誤)上運行。我在同一臺服務器上運行nginx和PHP,在另一個PHP應用程序連接到數據庫的地方,如果這是相關的話。

什麼可能導致此問題?

+1

數據庫是否要連接到實際稱爲'數據庫'的數據庫? –

+0

不,它被稱爲別的東西,這只是我實際上關心的應用程序有點笨拙的僞裝。 – fredrikekelund

回答

7

我試圖用MySQL模塊直接連接數據庫,但是這給了我同樣的錯誤。當尋找解決相同問題的解決方案時,但與MySQL模塊相關而不是Sequelize,我發現這個:connect ECONNREFUSED - node js , sql

我需要的是爲mysql模塊提供socketPath密鑰。以下是我如何更改我的代碼以使其正常工作:

var sequelize = new Sequelize("database", username, password, { 
    host: "localhost", 
    dialect: "mysql", 
    logging: function() {}, 
    pool: { 
     max: 5, 
     min: 0, 
     idle: 10000 
    }, 
    dialectOptions: { 
     socketPath: "/var/run/mysqld/mysqld.sock" 
    }, 
    define: { 
     paranoid: true 
    } 
}); 
+0

添加dialectOptions鍵還解決了我遇到的稍微不同的錯誤:「SequelizeConnectionError:連接丟失:服務器關閉了連接。」。這個錯誤同時發生在Sequelize 3.3.2和3.13.0中,並且在兩種情況下都通過dialectOptions修復。 – cfogelberg

+0

有沒有一種情況下,不會使用socketPath?這對於本地數據庫服務器而言,是否在連線(遠程數據庫服務器)上同樣有效? – Guy