編碼的世界 / 優質文選 / 歷史

配置MySQL服務器使得外網可以連接


2022年6月29日
-   

在一台電腦上安裝了MySQL服務器後,默認是不允許外網可以連接至該服務器上的MySQL的,不進行額外配置的話可能會出現如下兩種連接錯誤的情況(我用的是Navicat MySQL客戶端在Windows上連接Ubuntu上的MySQL數據庫)。
圖1 端口綁定問題

圖2 權限問題
前者是因為默認綁定端口問題,後者則是數據庫權限的問題。
解決問題一
首先使用如下命令查看3306端口綁定狀態
sudo netstat -an | grep 3306

如圖,3306端口是默認綁定在本地IP 127.0.0.1上的,所以外網無法訪問該主機的3306端口。 打開MySQL的配置文件:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

找到如下內容的一行並注釋掉:
bind-address = 127.0.0.1

重啟MySQL服務
sudo systemctl restart mysql

然後使用如下命令查看端口綁定狀態
sudo netstat -an | grep 3306


解決問題二
問題二是因為MySQL自帶的權限控制限制了外網訪問MySQL服務器,在Ubuntu主機上使用命令行連接至本地MySQL數據庫
sudo mysql -uroot -p[你的密碼]

然後選擇mysql數據庫並查看user表信息
use mysql
select user,host from user

發現root賬戶只允許localhost訪問,所以外網無法訪問。 可以使用如下命令給外網訪問授權
grant all privileges on *.* to 'root'@'[允許的ip]' identified by '[密碼]' with grant option;
flush privileges;

其中[允許的ip]如果設置為%的話則表示所有ip都可以訪問,[密碼]表示外網訪問的密碼是什麼。比如我設置成所有ip都可訪問,密碼是root,則命令如下:
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;

然後再查看表中的信息
select user,host from user;


至此,外網用戶就可以訪問你的MySQL服務器了。作者在Windows上沒有嘗試過,但是好像Windows上不會有端口綁定的問題,而且據說windows下連配置文件都沒了([尷尬])。

熱門文章