參考:https://www.cnblogs.com/dump/...
https://blog.csdn.net/asd104/...html
1.檢查虛擬機IP在本地是否能夠ping 經過
虛擬機IP:172.21.0.4
mysql
本地執行一下,沒有問題
2.檢查虛擬機Mysql的端口是否對外開放(這個必需要開放)linux
查看mysql的端口,在mysql命令行模式下執行如下命令就能夠查看,查到的結果是3306sql
[root@localhost ~]# mysql -u root -p mysql> show variables like '%port%';
查看虛擬機的3306端口是否開放數據庫
cmd下執行telnet 172.21.0.4 3306windows
沒法執行,別方,這是由於Windows telnet默認是關閉的服務器
從新打開cmd窗口執行命令,結果是沒法鏈接,這是由於虛擬機上的3306並無對外開放,能夠用22的試下效果就知道了tcp
3.打開linux的3306端口
首先安裝iptablesspa
若是你要改用iptables的話,須要安裝iptables服務:.net
安裝
sudo yum install iptables-services
開啓iptables
sudo systemctl enable iptables sudo systemctl enable ip6tables
啓動服務
sudo systemctl start iptables sudo systemctl start ip6tables
打開指定端口:
打開iptables文件
vi /etc/sysconfig/iptables
進入編輯頁面,在指定位置新增如下配置。放在 -A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT 後面
進入後用i編輯,將下列複製進去,而後按ESC鍵,輸入:wq!保存退出
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
修改完保存退出,重啓網卡服務
service iptables restart
在windwos下 ping 172.21.0.4 3306 仍是沒成功,是由於mysql沒有給外來主機的權限
解決辦法:
1.改表法
[root@localhost ~]# mysql -u root -p mysql> use mysql; mysql>update user set host = '%' where user = 'root'; mysql>select host, user from user; mysql> FLUSH PRIVILEGES;
其中更新表中數據報錯,不用管它,已經改好了,不信能夠查表來驗證
2.受權法。
例如,你想myuser使用mypassword從任何主機鏈接到mysql服務器的話。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; FLUSH PRIVILEGES;
若是你想容許用戶myuser從ip爲192.168.1.6的主機鏈接到mysql服務器,並使用mypassword做爲密碼
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; FLUSH PRIVILEGES;
若是你想容許用戶myuser從ip爲192.168.1.6的主機鏈接到mysql服務器的dk數據庫,並使用mypassword做爲密碼
GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; FLUSH PRIVILEGES;
四、驗證遠程鏈接虛擬機數據庫訪問
在windows中的cmd輸入telnet 172.21.0.4 3306
鏈接成功
以後就能夠用Navicat鏈接虛擬機中的數據庫了