iT邦幫忙

0

(已解決)請教前輩們Node.js 連結 VirtualBox 的 MySQL 錯誤如何解決

  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20220216/20124632neH6X1Djbm.png
https://ithelp.ithome.com.tw/upload/images/20220216/20124632xXZ5KMob9D.png
https://ithelp.ithome.com.tw/upload/images/20220216/20124632dGTFIZXqmD.png
如上圖,我在筆電VirtualBox安裝了LAMP Server虛擬機器(Ubuntu 20.04 Desktop)並設好連接埠轉送,依照https://www.w3schools.com/nodejs/shownodejs_cmd.asp?filename=demo_db_connection打好程式執行

var mysql = require('mysql');
var con = mysql.createConnection({
    host: "192.168.0.8",
    user: "root",
    password: "xxxxxxxxxx"
});
con.connect(function(err) {
    if (err) throw err;
    console.log("Connected!");
});

可是執行結果卻有錯誤如下圖:
https://ithelp.ithome.com.tw/upload/images/20220216/20124632eFNJHf2rHG.png
若是把MySQL的連接埠(3306)轉送移除,再執一遍則得到錯誤如下圖:
https://ithelp.ithome.com.tw/upload/images/20220216/20124632ExDccBYP3J.png

請教前輩們該從哪邊下手解決問題呢?謝謝!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0

從錯誤訊息來推斷,是被自動斷線了。
再注意到你是用root的帳號連接。

可以先試著建一個新的帳號出來。再連接看看。
另外注意一下連線時長。

看更多先前的回應...收起先前的回應...
camabula iT邦新手 3 級 ‧ 2022-02-22 11:07:10 檢舉

謝謝回覆,我有另建一個帳號t1@%,但在Guest OS(Ubuntu 20.04)裡測試可以,而在Host OS(Windows 11)裡卻失敗。
https://ithelp.ithome.com.tw/upload/images/20220222/201246329Z5ZxdCFQz.jpg

我懷疑Host OS(Windows 11)的Node.js無法像phpAdmin一樣可以讀取Guest OS(Ubuntu 20.04)的MySQL資料庫,所以我把my.cnf加了一道設定:

bind-address = 0.0.0.0 //允許任意IP連線

https://ithelp.ithome.com.tw/upload/images/20220222/201246322zhAcQB0xO.jpg

如此一來,Host OS(Windows 11)的Node.js就可以連上了:
https://ithelp.ithome.com.tw/upload/images/20220222/20124632Tk26M4IpTD.jpg

你在外部機用 localhost ??
連的到就有鬼了喔!!。
你因該要連結那台MYSQL的IP才對。

camabula iT邦新手 3 級 ‧ 2022-02-22 13:17:38 檢舉

謝謝星空兄提醒。
Host OS(Windows 11)是用自己的IP,Guest OS(Ubuntu 20.04)是用localhost。
https://ithelp.ithome.com.tw/upload/images/20220222/20124632tXIb29tWMG.jpg
https://ithelp.ithome.com.tw/upload/images/20220222/20124632HAWhtMa3jb.jpg
兩支demo_db_connection.js內容除了第4列

host: "x.x.x.x"

不一樣之外,其餘都相同。
但是一個是在Host OS裡執行連到Guest OS裡的MySQL;另一個則是在Guest OS裡執行連到自己的MySQL。

先輸出一下錯誤訊息。先明白發生了什麼事。

目前猜測幾個可能性

1.內網IP。所以連結不到(但看不到你的IP所以無法猜測)
不過你可以先PING看看能否看到
2.PORT 3306被擋住了

帳密理論上因該沒問題。畢竟本機可以跑了。

也可以試著裝個導航貓先連看看。看是程式的問題還是連結上的問題。

我要發表回答

立即登入回答