因為項目需要,在阿里云申請了一個服務器
通過遠程連接,安裝mysql-創(chuàng)建數據庫-創(chuàng)建用戶-設定用戶可以被在任意主機上進行連接-使用navicat新建連接-測試-連接失??;
查找原因:
-
阿里云防火墻沒有開啟3306端口
image.png
打開控制臺-安全-防火墻-開啟-重啟服務器-測試連接-失敗
ubuntu18.04 未開啟3306端口對外部訪問的過濾導致外部訪問無法進入,通過netstat命令,檢查3306端口,果然只有一個127.0.0.1:3306的監(jiān)聽端口
ub64@ub64-1804-1:~$ netstat -ntpl
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
檢查是否配置mysqld.cnf文件,bind-address的設置值問題
vim /etc/mysql/mysql.conf.d/mysqld.cnf
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
把bind-address修改成0.0.0.0,無限制,重啟服務器,重新檢查netstat,3306端口的訪問已經有所有來源地址的監(jiān)聽了。
ub64@ub64-1804-1:~$ netstat -ntpl
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
重啟數據庫,繼續(xù)測試,還是連接失敗;
- 防火墻問題,檢查防火墻通過規(guī)則,果然grep一下沒有見到3306的端口記錄。
ub64@ub64-1804-1:~$ sudo iptables -L -n | grep 3306
ub64@ub64-1804-1:~$
···
iptables新增一條3306的端口允許通過規(guī)則,在重新檢查一下iptables,這下有了。
···
ub64@ub64-1804-1:~$ sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
ub64@ub64-1804-1:~$ sudo iptables -L -n | grep 3306
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:3306
ub64@ub64-1804-1:~$
重新測試程序,程序訪問成功。mysql的訪問,不僅要設置user表用戶的訪問控制權限,還要設置mysqld.cnf的bind-address,同時系統(tǒng)防火墻規(guī)則也要配置好3306的端口通過權限。這3個地方的控制缺一不可
(補充:表用戶訪問控制權限更改----改表法:
登錄MySQL:mysql -uroot -p ,輸入密碼,登陸進去
選擇mysql表,將host只能本地訪問的 localhost 改為 %
mysql>use mysql;
mysql>update user set host="%" where user="chase";
mysql> select host,user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | chase |
| localhost | debian-sys-maint |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
+ rows in set (0.00 sec)
mysql>flush privileges; //刷新權限
mysql>exit;
)
