2016-08-22 82 views
0

我已經設置了一臺物理mac電腦作爲MySQL服務器。如果我通過終端訪問Internet,它可以很好地工作。 編輯:我現在認識到這只是在本地網絡上。所以,我現在設置一個靜態IP,並將不得不發佈另一個問題,如果我卡住爲什麼MySQL連接字符串在bash中工作,但不是JavaScript?

但我很想解決爲什麼有人不工作,如果我連接的JavaScript,如GoogleSpreadsheets或GoogleSpreadsheets中的任何相關插件(我也認爲它們都是用Javascript編寫的)。

我可以使用這些JavaScript方法中的任何一種來連接到我可以訪問的其他數據庫,但是我想知道爲什麼我無法連接到我的特定應用程序,以及是否有任何可以更改的內容?謝謝。


我在計算機A(Mac OS X Yosemite)上安裝了MySQL服務器。如果我在計算機B(Mac OS El Capitan)的bash中使用以下操作,那麼我可以很好地連接,然後從MySQL獲取任何需要的輸出。

$ # in bash, change path to ensure SQL runs 
$ export PATH=$PATH:/usr/local/mysql/bin/ 
$ # start sql and run a query 
$ mysql -u test -pXXXXX -h 192.168.XXX.XX sakila # replace X's with real credentials, where -p is for the password and -h is for the IP address. 
$ mysql> SHOW TABLES; 
$ mysql> #... output is good 
$ mysql> exit; 
$ 

如果我運行在谷歌電子表格的腳本編輯器相同的憑據,我得到的最後一行說,無論是我的連接字符串,用戶名或密碼不正確的錯誤。見下面的腳本。

// attempt to access SQL data using javascript on https://script.google.com 

function Drive() { 
var ServerIP = '192.168.XXX.XX'; // IP address of the server. replace with real IP 
var SQL_Port = '3306'; // port number 
var SQL_Usr = 'test'; // name of user 
var SQL_Pwd = 'xxxxx'; // password of user. replace with real password 
var SQL_DB = 'sakila'; // name of sample database downloaded from MySQL Workbench documentation. 

var connectorInstance = 'jdbc:mysql://' + ServerIP +':' + SQL_Port; 
var ConnectString = connectorInstance + '/' + SQL_DB; 

var conn = Jdbc.getConnection(ConnectString, SQL_Usr, SQL_Pwd); // error on this line 
} 

我的JavaScript,我的語法是絕對正確的,因爲如果我在憑證串換另一個在線數據庫,然後錯誤消失。同樣,我嘗試了4種不同的Google Spreadsheets加載項,這些加載項在附加存儲區中搜索「SQL」時可用;那些與我嘗試的所有數據庫一起工作,但不是我自己的

而且我自己的服務器的憑據和授權應該正常工作,因爲我可以使用bash進行連接,如頂部所示。

服務器中或其互聯網連接中的其他數據庫是否有一些安全選項設置,這意味着javascript將連接到他們的而不是我的?有什麼我錯過了嗎?

我的選擇是隻用bash訪問服務器(當我構建基於電子表格的前端時不太好),或者在線託管服務器,這會涉及一些成本。

SSH連接有幫助嗎?我以前沒有用過。任何幫助,將不勝感激。


步驟我已經試過

  • 我開始建立MySQL工作臺用一個配置文件 - 「等/ my.cnf中」

  • 我關閉了「skip-networking」。

  • 我確定「bind_address」已關閉,並且嘗試了「0.0.0.0」,「*」和「%」等變體。

  • 我跟着上了一段關於爲Google腳本設置javascript代碼的課程,並在位置「%」(授予我知道這不安全但是這是一個小測試數據庫)上提供足夠的用戶帳戶詳細信息。

  • 我試過在聯網或其他部分下使用其他選項文件首選項,但它們要麼沒有效果,要麼服務器無法成功重啓並且應用了這些選項。

  • 在測試我的數據庫連接之前,我確保重新啓動我的SQL服務器以確保應用了選項和用戶更改。

  • 我檢查過StackOverflow,看看還有誰在問遠程數據庫,javascript或連接字符串。沒有人似乎有我確切的問題。

  • 我試過使用主機名「Servers-Macbook-Air.local」代替IP,再次在bash中工作,但不在Javascript中。另外,如果我使用IP或主機名稱作爲另一個數據庫,那是有效的。

+0

網站的公網IP,您應該使用公網IP從script.google.com? ip從192.168開始是本地的.. – Hardy

+0

好吧,謝謝,這聽起來應該是這個問題。 – MikeCPT

+0

*「如果通過終端進行訪問,我通過互聯網遠程訪問它」*當然,這種情況並非「遠程訪問」。在獲得對本地shell的遠程訪問後,您仍然在本地**訪問它。 –

回答

0

哈代的評論後我做了一些研究 - 我認爲這是限制我的私人知識產權。我只在Wifi系列筆​​記本電腦上試過。

http://www.gohacking.com/private-and-public-ip-addresses/

說,例如,如果一個網絡X由10臺計算機,它們中的每可給出開始從192.168.1.1爲192.168.1.10的IP。與公共IP不同,專用網絡的管理員可以自由分配他自己選擇的IP地址(前提是IP地址屬於私人IP地址範圍)。

具有私有IP地址的設備無法直接連接到Internet。同樣,本地網絡之外的計算機也不能直接連接到具有專用IP的設備。

0

您的問題是你想的192.168.xxx.xxx

本地IP地址,則無法做到這一點從互聯網上。事實上,該IP地址只存在於您的網絡中。你和我都可以有IP 192.168.1.10。大多數現成的路由器都會創建以192.168.1.1開頭的網絡(這可能是您可以訪問防火牆的地方)。

這可以工作的唯一方法是如果您使用您的公共IP地址,並且您正在查找的端口配置爲指向您的計算機。這通常需要一些端口轉發或防火牆配置。

您可以檢查與像http://www.ipchicken.com

+0

我在設置下發現我的路由器是192.168.100.1。我試圖設置一個靜態IP並使用這兩篇​​文章添加DNS,但沒有這樣的運氣。 http://www.tp-link.co.za/FAQ-287.html http://kb.netgear.com/app/answers/detail/a_id/25191/~/configuring-tcp%2Fip-and- proxy-settings-on-mac-osx?cid = wmt_netgear_organic – MikeCPT

+0

你不需要DNS。去http://ipchicken.com,它會給你你的公共IP。然後您需要將端口3306(默認MySQL)轉發到您的本地IP地址,您提到的是'192.168.XXX.XXX' –

+0

謝謝Fernando。我遵循IP雞鏈接並將我的公有IP設爲41.77.XX.XX.它看起來像轉發一個端口意味着SSH隧道。你有任何鏈接?我在這裏找到了一個教訓。 https://support.cloud.engineyard.com/hc/en-us/articles/205408088-Access-Your-Database-Remotely-Through-an-SSH-Tunnel。 – MikeCPT

相關問題