問題:在服務器上用docker配值好MySQL8.0的容器後,本地navicat無法連接。
解決過程記錄,最後的解決方法是在安全組策略那裏進行配置。
先在CentOS上把容器運行起來:
- 下載鏡像
docker pull mysql:8.0
- 創建容器,設置端口映射3306-3306
docker run -di --name=mysql_a -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
- 進入容器啓動mysql
docker exec -it mysql_a /bin/bash
- 登陸
mysql -uroot -p123456
- 讓root可被所有ip鏈接,完了刷新限權
grant all privileges on *.* to root@'%' with grant option;
flush privileges;
- mysql8.0的版本和以前5的版本加密方式不一樣,之前被坑過一次導致navicat無法連接上。這裏先把這坑填了,將密碼修改並改爲之前的native加密方式。
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
- 上一步是讓遠程客戶端連接數據庫密碼被修改了,實際上內部還是原來的加密方式,同樣也修改一下,讓容器內部的登陸密碼也變成native加密方式。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
- 檢查用戶信息是否修改成功:
use mysql ; select user,host,authentication_string,plugin from user;
他表示改好了
我果然不可能這麼順利…看的很多教程好像到這一步就完了,而且成功連接上了。。
啓動防火牆:systemctl start firewalld
關閉防火牆:systemctl stop firewalld
檢查防火牆狀態:systemctl status firewalld
結果檢查我的防火牆狀態:
這根本沒開的嘛。。
1. 先安裝包命令包:
yum install net-tools
2.檢查端口使用情況,只看tcp的:
netstat -nplt
發現端口也是開啓的,沒毛病的嘛…
於是使用本地機器win10的命令【telnet ip 端口號】 對遠程服務器的3306端口進行測試:
這個需要win10本地設置開啓telnet服務,具體設置可以百度到。
telnet 47.94.239.23 3306
結果3306無法連通。
而我對ipv4的22端口測試發現是能夠連通的。
於是又登陸服務器:
看看應用程序是否只能bind在ipv6上面:
sysctl net.ipv6.bindv6only
結果:
看看ipv4是否能夠轉發:
sysctl net.ipv4.ip_forward
結果:
1 表示能轉發 ;0表示不能轉發
口區,結果又都是正常的。。
這個東類似於防火牆,都是通過iptable組件來過濾ip。
於是打開我的阿里雲的控制檯,打開安全組策略。
發現裏面默認只有開放端口22,但沒有包含3306的端口範圍,突然也明白了之前telnet測試爲什麼只有22號端口能夠連通,3306無法連通。