参考:https://www.cnblogs.com/dump/…https://blog.csdn.net/asd104/...1.检查虚拟机IP在本地是否可以ping 通过 虚拟机IP:172.21.0.4本地执行一下,没有问题2.检查虚拟机Mysql的端口是否对外开放(这个必须要开放)查看mysql的端口,在mysql命令行模式下执行以下命令就可以查看,查到的结果是3306[root@localhost ~]# mysql -u root -pmysql> show variables like ‘%port%’;查看虚拟机的3306端口是否开放cmd下执行telnet 172.21.0.4 3306无法执行,别方,这是因为Windows telnet默认是关闭的重新打开cmd窗口执行命令,结果是无法连接,这是因为虚拟机上的3306并没有对外开放,可以用22的试下效果就知道了3.打开linux的3306端口首先安装iptables如果你要改用iptables的话,需要安装iptables服务:安装sudo yum install iptables-services 开启iptablessudo 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 -pmysql> 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;4、验证远程连接虚拟机数据库访问在windows中的cmd输入telnet 172.21.0.4 3306连接成功之后就可以用Navicat连接虚拟机中的数据库了