我們進入mysql 時,沒有使用-A參數; 當我們打開數據庫,即use dbname時,要預讀數據庫信息,當使用-A參數時,就不預讀數據庫信息。
當數據庫中表非常多,如果預讀數據庫信息,將非常慢,可能會卡住,如果數據庫中表非常少,將不會出現問題。
從客戶端連接外網遠程數據庫:
mysql -h hostname -u username -P 端口 -p -A
下一行提示輸入密碼“Enter password”
正確輸入密碼后進入遠程數據庫。
不能正確連接阿里遠程數據庫的問題
2018年買了阿里雲服務器。一直沒有使用。最近希望用於練習mysql的操作。使用時遇到不少問題。這里總結。
- 阿里控制台概覽
- 配置安全組規則
- 設置:用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