2014-03-03 78 views
2

我有一個nodejs(帶有express)openshift應用程序,它有一個MySQL數據庫(因爲這是我最熟悉的),我無法弄清楚如何連接到它在當地的環境。我的最後一個項目是我用一個php框架與mamp連接到本地數據庫。什麼是節點的等價物?這是我必須連接的代碼:無法連接到具有nodejs的MySQL數據庫(openshift應用程序)

var mysql = require('mysql'); 

var connection = mysql.createConnection({ 
    host  : '127.0.0.1', 
    port  : '3307', 
    database : 'test' 

});

Error: connect ETIMEDOUT 
    at errnoException (net.js:901:11) 
    at Object.afterConnect [as oncomplete] (net.js:892:19) 
    -------------------- 
    at Protocol._enqueue (/Users/brandonmoffitt/stembudsnode/node_modules/mysql/lib/protocol/Protocol.js:110:26) 
    at Protocol.handshake (/Users/brandonmoffitt/stembudsnode/node_modules/mysql/lib/protocol/Protocol.js:42:41) 
    at Connection.connect (/Users/brandonmoffitt/stembudsnode/node_modules/mysql/lib/Connection.js:98:18) 
    at Object.<anonymous> (/Users/brandonmoffitt/stembudsnode/server.js:16:12) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 

我猜想那是因爲我想在本地連接到MySQL數據庫設立openshift,那我收到的錯誤:

connection.connect(function(err){ 
if (err){ 
    throw err; 
} 
else { 
    console.log('Connected'); 
} 
}); 

這裏嘗試在本地連接的時候是錯誤。我只是不知道還有什麼要嘗試在這裏。我已經嘗試過,沒有密碼。

如果我切換到本地主機的主機,這是我收到的錯誤:

Error: ER_DBACCESS_DENIED_ERROR: Access denied for user ''@'localhost' to database 'stembuds' 
at Handshake.Sequence._packetToError (/Users/brandonmoffitt/stembudsnode/node_modules/mysql/lib/protocol/sequences/Sequence.js:30:14) 
at Handshake.ErrorPacket (/Users/brandonmoffitt/stembudsnode/node_modules/mysql/lib/protocol/sequences/Handshake.js:91:18) 
at Protocol._parsePacket (/Users/brandonmoffitt/stembudsnode/node_modules/mysql/lib/protocol/Protocol.js:202:24) 
at Parser.write (/Users/brandonmoffitt/stembudsnode/node_modules/mysql/lib/protocol/Parser.js:62:12) 
at Protocol.write (/Users/brandonmoffitt/stembudsnode/node_modules/mysql/lib/protocol/Protocol.js:37:16) 
at Socket.<anonymous> (/Users/brandonmoffitt/stembudsnode/node_modules/mysql/lib/Connection.js:72:28) 
at Socket.EventEmitter.emit (events.js:95:17) 
at Socket.<anonymous> (_stream_readable.js:736:14) 
at Socket.EventEmitter.emit (events.js:92:17) 
at emitReadable_ (_stream_readable.js:408:10) 
-------------------- 
at Protocol._enqueue (/Users/brandonmoffitt/stembudsnode/node_modules/mysql/lib/protocol/Protocol.js:110:26) 
at Protocol.handshake (/Users/brandonmoffitt/stembudsnode/node_modules/mysql/lib/protocol/Protocol.js:42:41) 
at Connection.connect (/Users/brandonmoffitt/stembudsnode/node_modules/mysql/lib/Connection.js:98:18) 
at Object.<anonymous> (/Users/brandonmoffitt/stembudsnode/server.js:16:12) 
at Module._compile (module.js:456:26) 
at Object.Module._extensions..js (module.js:474:10) 
at Module.load (module.js:356:32) 
at Function.Module._load (module.js:312:12) 
at Function.Module.runMain (module.js:497:10) 
at startup (node.js:119:16) 

對不起,這篇文章的長度,我只是不知道爲什麼它不是工作。

編輯:

我ssh'ed到openshift外殼看mysql的設置。當我執行'show grants \ g'命令時,這是我收到的內容:

Grants for [email protected] 

    GRANT ALL PRIVILEGES ON *.* TO 'adminMYXaSuf'@'127.11.28.130' IDENTIFIED BY PASSWORD '*D0CE5FA2AAD801A33C9190D0B615CC92F364BE6B' WITH GRANT OPTION 

此密碼不同於openshift提供的密碼。

+0

您確定連接對象是否正確?從npm包看'pass'應該是'密碼'。還要確保你有正確的端口號,默認爲3306.也許你應該有一個'debug:true',然後告訴我們輸出的結果。 – HexCoder

回答

2

它看起來像你在你的本地計算機上運行此?如果你想從本地計算機上連接OpenShift上的mysql數據庫,你需要使用rhc port-forward命令,並查看它爲mysql提供的端口,然後你將ip設置爲127.0.0.1,港口像3307或任何它給你本地的東西。在測試連接時保持運行port-forward命令。你也可以試着將你的代碼放到openshift中,並用你所擁有的值運行它(或者使用你的設備上的env | grep MYSQL可以獲得的mysql環境變量),然後看看它是否有效。

127.x.x.X沒有公開可用的IP地址,它們是專用到該服務器,這就是爲什麼你不能從你的機器連接到它,並且需要使用RHC端口轉發命令

這個工作對我來說:

var mysql = require('mysql'); 

var connection = mysql.createConnection({ 
    host  : '127.0.0.1', 
    port  : '3306', 
    user  : 'admind4DxYD5', 
    password : 'some_pass', 
    database : 'developercorey' 
}); 

connection.connect(function(err){ 
if (err){ 
    throw err; 
} 
else { 
    console.log('Connected'); 
} 
}); 
+0

老兄謝謝!是的,它給我'127.0.0.1:3307'爲本地連接到MySQL。我試圖連接最好的方法來實現它的對象方式?另外本地,我是否還需要用戶名和密碼? – user2796352

+0

錯誤:連接ECONNREFUSED這是我嘗試連接新IP和端口號時收到的錯誤。 – user2796352

+0

你還在使用與上面完全相同的代碼嗎?不要忘記添加端口:在你的mysql配置中有3307 – 2014-03-03 17:55:26

8

你看了他們的文檔嗎? 如果你有負載平衡器,你的mysql將安裝在另一個設備上。 您需要使用環境變量在安裝墨盒

port 
OPENSHIFT_MYSQL_DB_PORT=44331 

host 
OPENSHIFT_MYSQL_DB_HOST=12345600a4382ec97a10000f7-somehost.rhcloud.com 

OPENSHIFT_MYSQL_DB_PASSWORD=somerandompassword 

username 
OPENSHIFT_MYSQL_DB_USERNAME=yourusername 

傳遞變量當您啓動的應用程序爲ARGS。

看看例子節點 https://github.com/openshift-quickstart/nodejs-example/blob/master/server.js

只是使用像process.env.OPENSHIFT_MYSQL_DB_HOST的環境變量,以取代在數據庫連接字符串。

var mysql = require('mysql'); 

var connection = mysql.createConnection({ 
    host  : process.env.OPENSHIFT_MYSQL_DB_HOST, 
    user  : process.env.OPENSHIFT_MYSQL_DB_USERNAME, 
    password : process.env.OPENSHIFT_MYSQL_DB_PASSWORD, 
    port  : process.env.OPENSHIFT_MYSQL_DB_PORT, 
    database : process.env.OPENSHIFT_APP_NAME 
}); 
+0

謝謝你。這個文件在哪裏?另外,在過去,我在使用本地環境中的openshift env變量時遇到了麻煩。我對JS很陌生。你能否詳細說明傳遞變量作爲參數?當你說變量時,你在談論env變量? – user2796352

+0

當我使用進程env變量,這是我得到的錯誤錯誤:ER_DBACCESS_DENIED_ERROR:訪問拒絕用戶'''本地主機'到數據庫'stembuds' – user2796352

+0

什麼數據庫你創建?,數據庫是你的應用程序名稱,你可以連接沒有數據庫或錯誤的數據庫名稱 – wayne

相關問題