Java 連結遠端 MySQL

昨天小蛙在我的股票精算師中加入了股票代號查詢的方法,找來找去找到證交所有提供相關資料,總共有三個頁面,且頁面非常龐大,光是把頁面全部開啟就要花近秒以上,更別說 Android Phone 查詢時的等待時間了,於是小蛙把證交所這些文件 Crawler 出來存在蛙齋的 MySQL,從 Android Phone上透過 RESTful Service 做查詢動作。從本機的Crawler爬取證交所的資料後,把資料整理好存入蛙齋的 MySQL 時發生沒辦法連結到遠端 MySQL 的問題,這篇文章記錄小蛙的解決方法。其實之前小蛙已經寫過 Java 連結 MySQL 的方法,今天要連結的時候去看了一下(平常使用 Oracle 比較多,有時候真的要記錄一下><,或是自己包好 API 直接可以用),竟然沒有辦法連線,錯誤訊息是

1
2
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
java.net.ConnectException: Connection refused: connect

原本覺得是沒有辦法透過root遠端的問題,新增了一個使用者,由於只是要新增、刪除、修改資料,權限只開啟SELECT, INSERT, UPDATE,新增完使用者重啟MySQL後結果還是一樣 …
上網找了找到 Java Gossip: 連接資料庫 @ 良葛格學習筆記 裡面提到依資料庫的編碼可以加上 useUnicode, characterEncoding 這兩個參數(先筆記起來,之前的那篇沒寫到),到這邊其他的 code 應該都沒問題才對,連線方式設定成jdbc:mysql://remoteIP:3306/資料庫名稱
熊熊想起來很久很久以前,也是卡在這個部份,看來應該是遠端網路設定的問題,果不其然在 遠端無法連線到MySQL Server ERROR 2003 (HY000) @ 玩物尚誌 中看到兩個解決方式,以下內容截錄自 遠端無法連線到MySQL Server ERROR 2003 (HY000) @ 玩物尚誌

如果必須透過遠端檢視或操作 MySQL Server,需要修改一下設定檔,將 bind-addressskip-networking 的選項取消(如果被開啟的話)。

小蛙在自己的 ubuntu 上找了到 /etc/mysql/my.cnf 檔案果然就看到 bind-address 的設定,註解掉之後就可以正常連線囉!(開啟之後可能就必須要注意到一些安全性的問題了)
以下也先備份下來,玩物尚誌中提到用 netstat -nl grep 3306 看看 mysql 是不是已經正常啟動,或者是如果有開啟防火牆的話,也有可能是被防火牆檔掉喔(iptables -L)!先記錄下來,免得下次遇到又花了冤枉時間在找資料。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *