在一台电脑上安装了MySQL服务器后,默认是不允许外网可以连接至该服务器上的MySQL的,不进行额外配置的话可能会出现如下两种连接错误的情况(我用的是Navicat MySQL客户端在Windows上连接Ubuntu上的MySQL数据库)。
前者是因为默认绑定端口问题,后者则是数据库权限的问题。
解决问题一
首先使用如下命令查看3306端口绑定状态
sudo netstat -an | grep 3306
输出如下图:
如图,3306端口是默认绑定在本地IP 127.0.0.1上的,所以外网无法访问该主机的3306端口。
打开MySQL的配置文件:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到如下内容的一行并注释掉:
bind-address = 127.0.0.1
重启MySQL服务
sudo systemctl restart mysql
然后使用如下命令查看端口绑定状态
sudo netstat -an | grep 3306
输出如下图:
解决问题二
问题二是因为MySQL自带的权限控制限制了外网访问MySQL服务器,在Ubuntu主机上使用命令行连接至本地MySQL数据库
sudo mysql -uroot -p[你的密码]
然后选择mysql数据库并查看user表信息
use mysql
select user,host from user
显示如下图
发现root账户只允许localhost访问,所以外网无法访问。
可以使用如下命令给外网访问授权
grant all privileges on *.* to 'root'@'[允许的ip]' identified by '[密码]' with grant option;
flush privileges;
其中[允许的ip]如果设置为%的话则表示所有ip都可以访问,[密码]表示外网访问的密码是什么。比如我设置成所有ip都可访问,密码是root,则命令如下:
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
然后再查看表中的信息
select user,host from user;
输出如下:
至此,外网用户就可以访问你的MySQL服务器了。作者在Windows上没有尝试过,但是好像Windows上不会有端口绑定的问题,而且据说windows下连配置文件都没了([尴尬])。