2014-09-12 115 views
1

我在windows上運行Node.js 0.10.31,在192.168.2.150上運行的虛擬機ubuntu上運行我的mySQL 5.5.35。現在節點JS連接到MySQL我已經使用以下連接器:無法將nodejs連接到mysql

https://github.com/felixge/node-mysql

代碼:

var mysql = require('mysql'); 
var connection = mysql.createConnection({ 
host : '192.168.2.150', 
user : 'root', 
password : '*****', 
port : 3306 
}); 

connection.connect(function(err) { 
if (err) { 
console.error('error connecting: ' + err.stack); 
return; 
} 

console.log('connected as id ' + connection.threadId); 
}); 


connection.query('SELECT 1', function(err, rows) { 
// connected! (unless `err` is set) 
console.log(err, rows); 
}); 

在my.cnf文件bind address是0.0.0.0。此外,在用戶表中,我已將所有數據庫的權限授予[email protected]。但是,我仍然無法從節點連接到MySQL,並且它給出了以下錯誤。 我甚至嘗試過Node js 0.8.2版本,但仍然無法正常工作。任何人都可以指出錯誤?

錯誤:

error connecting: Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@' 
192.168.2.99' (using password: YES) 
    at Handshake.Sequence._packetToError (G:\Coding_Zone\NodeJs_Work\Output\node 
_modules\mysql\lib\protocol\sequences\Sequence.js:48:14) 
    at Handshake.ErrorPacket (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mys 
ql\lib\protocol\sequences\Handshake.js:101:18) 
    at Protocol._parsePacket (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mys 
ql\lib\protocol\Protocol.js:271:23) 
    at Parser.write (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mysql\lib\pr 
otocol\Parser.js:77:12) 
    at Protocol.write (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mysql\lib\ 
protocol\Protocol.js:39:16) 
    at Socket.Connection.connect (G:\Coding_Zone\NodeJs_Work\Output\node_modules 
\mysql\lib\Connection.js:82:28) 
    at Socket.EventEmitter.emit (events.js:88:17) 
    at TCP.onread (net.js:397:14) 
    -------------------- 
    at Protocol._enqueue (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mysql\l 
ib\protocol\Protocol.js:135:48) 
    at Protocol.handshake (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mysql\ 
lib\protocol\Protocol.js:52:41) 
    at Connection.connect (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mysql\ 
lib\Connection.js:109:18) 
    at Object.<anonymous> (G:\Coding_Zone\NodeJs_Work\Output\mySqlTest.js:9:12) 
    at Module._compile (module.js:449:26) 
    at Object.Module._extensions..js (module.js:467:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Module.runMain (module.js:492:10) 
    at process.startup.processNextTick.process._tickCallback (node.js:244:9) 
{ [Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'192.168.2.99' (
using password: YES)] 
    code: 'ER_ACCESS_DENIED_ERROR', 
    errno: 1045, 
    sqlState: '28000', 
    fatal: true } undefined 

更新:

我曾嘗試與其他用戶還並在數據庫中給予他們充分的權限。但仍然無法解決錯誤。 但奇怪的是我能夠連接到MySQL客戶端

+0

你解決這個問題?如果是的話,請選擇一個答案。 – codecowboy 2015-11-22 09:56:55

回答

7

正如@Paul聲明的那樣,它不是NodeJS的問題。如果你仔細看看你正在授予用戶[email protected](它說「用戶root從IP 192.168.2連接。150" ),但在錯誤消息指出:

Access denied for user 'root'@'192.168.2.99' 

嘗試對IP的超級用戶權限在您的NodeJS實例運行(192.168.2.99),它應該工作

+0

嗨,我使用的是goDaddy MySQL數據庫,並且我已經授予了我的IP地址的權限,事實上我已經通過%通配符來授予訪問數據庫的任何IP的權限,但它仍然向我顯示上面提到的相同錯誤@Naresh 。錯誤:ER_ACCESS_DENIED_ERROR:訪問被拒絕用戶'user-portal'@'1.186.37.68'(使用密碼:YES) – codeinprogress 2016-09-07 06:51:20

+0

@codeinprogress看起來像您的憑據不正確(假設設置和IP地址是正確的) – JakubKnejzlik 2016-09-07 08:36:45

1

您是否嘗試過使用MySQL客戶端中的相同信息進行連接?

您確定root用戶未被禁用(因爲它通常是默認情況下)嗎?

簡而言之,這對我來說看起來不像Node問題,但是獲得正確憑證和配置的問題。

+0

我也曾與其他用戶一起嘗試過,並授予他們在數據庫中的完全權限。但仍然無法解決錯誤。此外,我能夠連接到MySQL客戶端。 – Naresh 2014-09-12 13:49:09

+1

你在MySQL日誌中得到了什麼有用的東西嗎?它看起來像你在一個Windows機器上,有可能訪問被拒絕的錯誤是由你的防火牆在端口3306上屏蔽了一個塊;您可以通過查看您的mysql日誌來確定是否從其角度來看登錄嘗試。最後,你的MySQL設置本身(不是用戶,設置)可能只允許本地主機訪問,在這種情況下,主機值192.168.2.150將不起作用,即使這是本地主機的IP。 – Paul 2014-09-12 15:22:45

0

命令提示符運行時權限有限。取消選中命令提示符快捷方式中的相應框,它可能正常工作。我昨天有這個問題。

1

添加我的輸入,因爲它可能會幫助其他人。我面臨同樣的問題,下面的步驟解決了它。

  1. 打開工作臺
  2. 打開到數據庫的連接所屬。
  3. 左側,在管理下,單擊用戶和特權。
  4. 單擊添加帳戶按鈕,正下方的用戶帳戶列表。
  5. 輸入登錄名,'主機匹配'到本地主機或您的主機名, 輸入密碼。
  6. 轉到模式權限選項卡,單擊添加條目按鈕並單擊確定。您也可以指定用戶可以訪問的單個數據庫。
  7. 爲用戶選擇所需的權限,如「選擇」,「插入」等。
  8. 單擊應用並使用新創建的用戶從Nodejs進行連接。
+0

這沒有爲我工作。 – 2017-08-30 17:16:47

0

嘗試通過改變端口號3307

var mysql = require('mysql'); 

var connection = mysql.createConnection({ 

    host : '192.168.2.150', 
    user : 'root', 
    password : '*****', 
    port : 3307 

}); 

connection.connect(function(error) { 
    if(error) throw error; 
    console.log("Connected to database"); 
}); 

它爲我