從客戶端連接遠程數據庫: mysql -h hostname -u username -P 端口 -p 密碼


我們進入mysql 時,沒有使用-A參數; 當我們打開數據庫,即use dbname時,要預讀數據庫信息,當使用-A參數時,就不預讀數據庫信息。

當數據庫中表非常多,如果預讀數據庫信息,將非常慢,可能會卡住,如果數據庫中表非常少,將不會出現問題。

 

從客戶端連接外網遠程數據庫:

mysql -h hostname -u username -P 端口 -p  -A

下一行提示輸入密碼“Enter password”

正確輸入密碼后進入遠程數據庫。

 


 

 

不能正確連接阿里遠程數據庫的問題

2018年買了阿里雲服務器。一直沒有使用。最近希望用於練習mysql的操作。使用時遇到不少問題。這里總結。

  1. 阿里控制台概覽
  2. 配置安全組規則
  3. 設置:用mysql命令直接連接數據庫。

其中遇到的直接問題就是不能使用mysql命令直接連接數據庫。中間繞了很多灣。填了不少坑。

 

 

 

公網和私有網的區別

 

 

  • 39.100.49.243 這是用於互聯網連接的ip地址。
  • 172.26.132.153這是局域網使用的地址。 

我的❌,就是錯把私有網當成公網連接的ip。

 

阿里的安全組

首先,我的❌,不了解端口的作用。

通信端口,又稱為端口、協議端口在計算機網絡中是一種經由軟件創建的服務,在一個計算機操作系統中扮演通信的端點。
每個通信端口都會與主機的IP地址及通信協議關聯。
通信端口以16比特數字來表示,這被稱為通信端口編號。

其次,我的❌,不了解阿里雲服務器的安全組

安全組是一種虛擬防火牆,具備狀態檢測和數據包過濾能力,用於在雲端划分安全域。
通過配置安全組規則,您可以控制安全組內一台或多台ECS實例的入流量和出流量。

  

遠程連接mysql數據庫(默認:監聽的端口是3306)

在配置文件/etc/mysql/mysql.conf.d/mysqld.cnf可以設置:

port            = 3306  #這是默認 

 

第一步:添加防火牆白名單:

知道了阿里雲服務器的安全組配置和mysql的監聽端口,就可以手動添加:

 

 

第2步:修改mysql的監聽ip

默認情況下mysql只允許127.0.0.1在局域網進行訪問, 因此需要將MySQL改成監聽遠程主機IP或者所有IP。

 

以Ubuntu為例,打開修改以下文件:

vim /etc/mysql/mysql.conf.d/mysqld.cnf

找到bind-address,如果監聽固定遠程IP,則改成遠程主機IP,若監聽所有IP,則改成0.0.0.0或者注釋bind-address。

bind-address            = 127.0.0.1
#改成
bind-address            = 0.0.0.0

修改完成后重啟MySQL:

service mysql restart

是否有對應的端口,在遠程主機上,使用netstat -an 

root@iZ8vbcqz91cgdxkf2tcrsvZ:~# netstat -an 
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN  tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 

精確查詢netstat -an | grep 3306

⚠️這里有關於bind-address的補充信息, 附加到文末。

 

第3步:授權遠程訪問mysql的各種權限

遠程登錄進入服務器,用root用戶進入mysql控制台,輸入:

mysql> grant all privileges on *.* to '用戶'@'ip' identified by '密碼' with grant option;
mysql> flush privileges;
  • 第一句語句語句中,
    • *.*代表所有庫表,第一個*代表所有數據庫,第2個*代表這個數據庫所有的表。
    • 若想給予所有IP權限,”ip”寫成“%”,但不建議,可以指定ip:
      • 查看一台電腦的公網ip的方法(mac): curl ipinfo.io
      • 或者google輸入: 本機公網ip
      • ⚠️本機公網ip,經常變化。
    • 所以第一句sql的意思是給予來自所有IP地址的通過“用戶”,“密碼”登錄的用戶對所有庫表的所有操作權限。
  • 第二句sql,刷新權限。

意思:授權從某某IP來的用戶名叫xxx,密碼是xxx的用戶訪問xxx數據庫的xxx表,可以對其進行xxx種操作。

具體可以參考之前的博客:https://www.cnblogs.com/chentianwei/p/12106161.html

 

第2步補充:關於ivp6和ivp4

MySQL服務器在單個網絡套接字上偵聽TCP / IP連接。該套接字綁定到單個地址,但地址可能映射到多個網絡接口。要指定地址,請在服務器啟動時使用該選項,其中是IPv4或IPv6地址或主機名。如果是主機名稱,則服務器將名稱解析為IP地址並綁定到該地址。

bind-address = xxxxxx

第2步改成

  • 0.0.0.0則服務器接受所有服務器主機IPv4接口上的TCP / IP連接。
  • ::, 則服務器接受所有服務器主機IPv4和IPv6接口上的TCP / IP連接。
#設置用0.0.0.0
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN    
#注釋掉bind-address
tcp6       0      0 :::3306                 :::*                    LISTEN    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM