昨天小蛙在我的股票精算師中加入了股票代號查詢的方法,找來找去找到證交所有提供相關資料,總共有三個頁面,且頁面非常龐大,光是把頁面全部開啟就要花近秒以上,更別說Android Phone查詢時的等待時間了,於是小蛙把證交所這些文件Crawler出來存在蛙齋的MySQL,從Android Phone上透過RESTful Service做查詢動作。從本機的Crawler爬取證交所的資料後,把資料整理好存入蛙齋的MySQL時發生沒辦法連結到遠端MySQL的問題,這篇文章記錄小蛙的解決方法。

其實之前小蛙已經寫過 Java 連結 MySQL 的方法,今天要連結的時候去看了一下(平常使用Oracle比較多,有時候真的要記錄一下><,或是自己包好API直接可以用),竟然沒有辦法連線,錯誤訊息是

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)!先記錄下來,免得下次遇到又花了冤枉時間在找資料。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *