本地能否ping通本机IP通过虚拟机IP在本地执行:172.21.0.4,没问题2.检查虚拟机mysql的端口是否对外开放(这个必须开放)检查的端口mysql并在mysql命令行模式下执行可以用下面的命令查看,结果是3306[root@localhost~]#mysql-uroot-pmysql>showvariableslike'%port%';检查虚拟机的3306端口是否打开,在cmd3306下执行telnet172.21.0.4不能执行,否则这是因为windows默认关闭了telnet。重新打开cmd窗口执行命令,结果是无法连接。这是因为虚拟机上的3306没有对外开放。可以用22来测试效果。3、打开linux的3306端口,先安装iptables。如果要切换到iptables,需要安装iptables服务:installsudoyuminstalliptables-services启用iptablessudosystemctlenableiptablessudosystemctlenableip6tablesstartservicesudosystemctlstartiptablessudosystemctlstartip6tables打开指定端口:打开iptables文件vi/etc/sysconfig/iptables进入编辑页面,在指定位置添加如下配置。放在-AINPUT-mstate–stateNEW-mtcp-ptcp–dport22-jACCEPT后面,回车后用i编辑,把下面复制进去,然后按ESC键,输入:wq!保存退出-AINPUT-mstate--stateNEW-mtcp-ptcp--dport3306-jACCEPT修改后保存退出,重启网卡服务serviceiptablesrestart,windwos下ping172.21.0.43306依旧失败,因为Mysql没有外部主机的权限解决方法:1.改表方法[root@localhost~]#mysql-uroot-pmysql>usemysql;mysql>updateusersethost='%'whereuser='root';mysql>selecthost,userfromuser;mysql>FLUSHPRIVILEGES;其中update表中的数据报错,不用管,已经改了,不信可以查表验证2.授权方式。例如,您希望myuser使用mypassword从任何主机连接到mysql服务器。将*.*上的所有权限授予“myuser”@“%”,由“mypassword”标识并授予选项;冲洗特权;如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码GRANTALLPRIVILEGESON*.*TO'myuser'@'192.168.1.3'IDENTIFIEDBY'mypassword'有授予选项;冲洗特权;如果要允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器的dk数据库,密码为mypasswordGRANTALLPRIVILEGESONdk.*TO'myuser'@'192.168.1.3'由带有授予选项的“mypassword”标识;冲洗特权;4、验证远程连接虚拟机数据库访问windows中cmd输入telnet172.21.0.43306连接成功后就可以使用Navicat连接虚拟机中的数据库了
