連接MySQL失敗 mysql連接不成功怎么辦



文章插圖
連接MySQL失敗 mysql連接不成功怎么辦

文章插圖
遠程連接是輸入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: latin1Db characterset: latin1Client characterset: utf8Conn. 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失敗 mysql連接不成功怎么辦】參考:配置mysql允許遠程連接的方法