MySQL默认安装后仅监听本地127.0.0.1地址,且root用户默认只允许本地登录,因此要实现远程连接,需要从服务配置、用户权限、网络端口三个层面进行调整。完成配置后,外部设备就可以通过IP地址和端口访问目标MySQL数据库。

一、修改MySQL服务绑定地址
首先需要让MySQL服务监听所有网络接口的请求,而不是仅监听本地回环地址。不同系统下的配置文件路径略有差异,常见配置路径如下:
- Linux系统:/etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/my.cnf
- Windows系统:MySQL安装目录下的my.ini文件
打开配置文件后,找到[mysqld]段落下的bind-address配置项,将其值修改为0.0.0.0,修改后保存文件并重启MySQL服务。
Linux系统重启命令示例:
# 重启MySQL服务 sudo systemctl restart mysql # 查看服务监听状态,确认3306端口监听在0.0.0.0 sudo netstat -tlnp | grep 3306
二、配置MySQL远程用户权限
仅开放服务监听还不够,还需要为远程连接的用户配置对应的访问权限,支持两种方式:修改现有用户权限、创建新的远程用户。
方式1:修改root用户允许远程登录
登录本地MySQL后执行以下SQL语句,将root用户的host改为%,表示允许所有IP访问:
-- 登录本地MySQL mysql -u root -p -- 切换到mysql系统库 USE mysql; -- 修改root用户的host为%,允许所有IP访问 UPDATE user SET host = '%' WHERE user = 'root'; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
方式2:创建专属远程用户
不建议直接开放root用户远程权限,更安全的做法是创建专门的远程用户,仅授予对应数据库的权限:
-- 创建用户,用户名是remote_user,允许所有IP访问,密码是your_password CREATE USER 'remote_user'@'%' IDENTIFIED BY 'your_password'; -- 授予该用户所有数据库的所有权限,可根据实际需求调整权限范围 GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%'; -- 刷新权限 FLUSH PRIVILEGES;
三、开放服务器防火墙端口
如果服务器开启了防火墙,还需要开放MySQL默认的3306端口,允许外部流量访问该端口。
Linux系统(ufw防火墙)
# 开放3306端口 sudo ufw allow 3306/tcp # 重启防火墙 sudo ufw reload # 查看端口开放状态 sudo ufw status
Linux系统(firewalld防火墙)
# 开放3306端口 sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent # 重新加载防火墙规则 sudo firewall-cmd --reload # 查看开放的端口 sudo firewall-cmd --zone=public --list-ports
Windows系统
打开Windows Defender防火墙,进入入站规则,新建规则选择端口,输入3306,允许连接即可。
四、测试远程连接
在外部设备上使用MySQL客户端工具测试连接,以下是命令行连接示例:
# 替换为实际的服务器IP、用户名和密码 mysql -h 192.168.0.1 -u remote_user -p
如果使用可视化工具连接,填写服务器IP、端口3306、用户名和密码即可。
五、常见连接失败排查
| 失败现象 | 可能原因 | 解决方法 |
|---|---|---|
| 连接超时 | 服务器防火墙未开放3306端口,或MySQL未监听0.0.0.0 | 检查防火墙规则和服务监听状态 |
| 拒绝访问 | 用户权限未配置,或密码错误 | 检查用户host是否为%,确认密码正确 |
| 提示主机不允许连接 | 用户host限制为特定IP,当前连接IP不在允许范围 | 修改用户host为%或添加对应IP的权限 |
注意:生产环境不建议将用户host设置为%,可以指定具体的客户端IP,同时仅授予必要的数据库操作权限,降低安全风险。