遠程連接是輸入mysql所在主機的IP和端口來確定主機的邏輯地址,再通過用戶和密碼來確定登錄哪個用戶。比如:
String url = "jdbc:mysql://192.168.183.134:3306/mysql";
就是先在網絡層連上IP為192.168.183.134的主機,再去連接這臺主機的具體端口3306(傳輸層),然后傳輸層達成連接后,在應用層用賬號密碼登陸,訪問mysql數據庫:
Connection conn = DriverManager.getConnection(url, user, password);
一開始我懷疑是否端口設置問題,然后在/etc/mysql/my.cnf上加上了port=3306,結果還是連不上,顯示端口拒絕訪問。
然后用命令$netstat -apn 找到端口3306的一條信息:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
仔細一看,這里提供的IP是127.0.0.1,結合socket編程的經驗,一般要接收任意主機發送的消息時,IP會設置為0.0.0.0,而127.0.0.1(回送地址)是否意味著只能本地訪問?然后打開同學的Debian查看他的mysql占用端口時,果然如我所想:
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
經過一番搜索后,得出結論是mysql默認只提供給本地訪問,而要開啟遠程訪問功能需要額外設置。從安全的角度看這也是合理的。
設置方法還是修改配置文件/etc/mysql/my.cnf
[client] default-character-set=utf8
[mysqld]
default-storage-engine=INNODB character-set-server=utf8 collation-server=utf8_general_ci port=3306 bind-address=0.0.0.0
utf8相關的是之前本地錄入漢字數據時發現插入失敗,漢子和VARCHAR不兼容,在mysql模式下輸入STATUS查看的狀態時:
Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8
經過這個修改后,前2個字符集就全變成了utf8,支持中文。其他的修改就如同我所說的,綁定IP為0.0.0.0,即接收任意地址的主機的連接,端口綁定3306。
但是依然不能訪問,只不過錯誤信息發生了改變,這次很明確了,是顯示用戶沒有連接權限,也就是說用戶只能本地連接,依然搜索資料后得出解決方案如下:
1.新建用戶遠程連接mysql數據庫
mysql> grant all on *.* to team@'%' identified by 'java123' with grant option; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
2.支持root用戶允許遠程連接mysql數據庫
mysql> grant all on *.* to 'root'@'%' identified by 'cplusplus' with grant option; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
參考:配置mysql允許遠程連接的方法


版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。