参考:https://www.cnblogs.com/dump/...
https://blog.csdn.net/asd104/...html
1.检查虚拟机IP在本地是否能够ping 经过
虚拟机IP:172.21.0.4mysql
本地执行一下,没有问题
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链接虚拟机中的数据库了