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: 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允許遠程連接的方法

遠程連接 Mysql 失敗的解決方法

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/227903.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 21:25
下一篇 2024-12-09 21:25

相關推薦

發表回復

登錄後才能評論