如上圖,我在筆電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!");
});
可是執行結果卻有錯誤如下圖:
若是把MySQL的連接埠(3306)轉送移除,再執一遍則得到錯誤如下圖:
請教前輩們該從哪邊下手解決問題呢?謝謝!
從錯誤訊息來推斷,是被自動斷線了。
再注意到你是用root的帳號連接。
可以先試著建一個新的帳號出來。再連接看看。
另外注意一下連線時長。
謝謝回覆,我有另建一個帳號t1@%,但在Guest OS(Ubuntu 20.04)裡測試可以,而在Host OS(Windows 11)裡卻失敗。
我懷疑Host OS(Windows 11)的Node.js無法像phpAdmin一樣可以讀取Guest OS(Ubuntu 20.04)的MySQL資料庫,所以我把my.cnf加了一道設定:
bind-address = 0.0.0.0 //允許任意IP連線
如此一來,Host OS(Windows 11)的Node.js就可以連上了:
你在外部機用 localhost ??
連的到就有鬼了喔!!。
你因該要連結那台MYSQL的IP才對。
謝謝星空兄提醒。
Host OS(Windows 11)是用自己的IP,Guest OS(Ubuntu 20.04)是用localhost。
兩支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被擋住了
帳密理論上因該沒問題。畢竟本機可以跑了。
也可以試著裝個導航貓先連看看。看是程式的問題還是連結上的問題。