配置MySQL服务器使得外网可以连接

本文介绍了如何解决MySQL服务器不允许外网连接的问题,包括修改端口绑定和调整数据库权限两个方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一台电脑上安装了MySQL服务器后,默认是不允许外网可以连接至该服务器上的MySQL的,不进行额外配置的话可能会出现如下两种连接错误的情况(我用的是Navicat MySQL客户端在Windows上连接Ubuntu上的MySQL数据库)。

图1 端口绑定问题

绑定端口未解开

图2 权限问题

数据库未配置
前者是因为默认绑定端口问题,后者则是数据库权限的问题。


解决问题一

首先使用如下命令查看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下连配置文件都没了([尴尬])。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值