在使用宝塔面板部署网站或应用时,我们经常会遇到需要从本地或其他服务器远程连接到MySQL数据库的情况。然而,默认情况下,宝塔面板安装的MySQL是禁止远程连接的,这会导致你使用数据库管理工具(如Navicat、DBeaver、HeidiSQL等)时连接失败。

本文将详细介绍如何在宝塔面板环境下为MySQL开启远程连接,涵盖从云服务器配置到数据库权限设置的完整流程,适用于MySQL 5和MySQL 8版本。


问题原因分析

当你尝试远程连接MySQL时出现“10061”、“10038”或“2003 - Can't connect to MySQL server”等错误,通常由以下三个原因造成:

  1. 云服务器安全组未放行3306端口

  2. 宝塔面板防火墙未放行3306端口

  3. MySQL用户权限未允许远程访问

接下来,我们将逐一解决这三个问题。


步骤一:在云服务器厂商控制台放行3306端口

无论你使用的是阿里云、腾讯云、华为云还是其他云服务商,都需要在安全组规则中放行MySQL的默认端口 3306

操作步骤(以阿里云为例):

  1. 登录 阿里云ECS控制台

  2. 找到你的服务器实例,点击进入详情页

  3. 进入“安全组”或“网络与安全组”配置

  4. 添加安全组规则:

    • 授权策略:允许

    • 协议类型:TCP

    • 端口范围:3306/3306

    • 授权对象:0.0.0.0/0(允许所有IP)

⚠️ 建议:生产环境不要开放给所有IP,仅允许特定IP访问以提高安全性。


步骤二:在宝塔面板防火墙中放行3306端口

即使云服务器放行了端口,宝塔面板自带的防火墙也可能拦截外部请求。

操作步骤:

  1. 登录宝塔面板

  2. 进入左侧菜单 “安全”“系统防火墙”

  3. 点击 “添加端口规则”

  4. 输入端口:3306

  5. 备注可填写“MySQL远程连接”

  6. 点击“确定”

✅ 此时,服务器的防火墙已允许外部访问3306端口。


步骤三:开启MySQL远程访问

1. 登录MySQL命令行

mysql -u root -p

输入你的MySQL root密码后进入MySQL命令行。

2. 根据MySQL版本执行不同命令

✅ MySQL 5.x 版本

-- 1. 授权所有数据库的所有表给root用户,允许任何IP访问,并设置密码

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的root密码' WITH GRANT OPTION;

-- 2. 刷新权限

FLUSH PRIVILEGES;

✅ MySQL 8.x 版本(注意语法变化)

MySQL 8取消了 IDENTIFIED BYGRANT 中的用法,需分步操作:

-- 1. 修改root用户认证方式(可选,解决某些客户端兼容性问题)

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的root密码';

-- 2. 创建或授权root用户从任意主机登录

CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的root密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

-- 3. 刷新权限

FLUSH PRIVILEGES;

📌 替换 '你的root密码' 为实际的root密码

3. 验证用户权限

SELECT user, host FROM mysql.user WHERE user = 'root';

你应该能看到类似结果:

+------+-----------+
| user | host      |
+------+-----------+
| root | localhost |
| root | %         |
+------+-----------+

这表示root用户可以从任意IP连接。


测试远程连接

使用Navicat、DBeaver或命令行测试连接:

  • 主机:你的服务器公网IP

  • 端口:3306

  • 用户名:root

  • 密码:你设置的密码

如果连接成功,说明配置完成!


结语

通过以上三步:放行云服务器端口 → 开启宝塔防火墙 → 配置MySQL远程权限,你已经成功开启了宝塔面板MySQL的远程连接功能。

虽然过程看似复杂,但只要按步骤操作,绝大多数连接问题都能迎刃而解。希望本文能帮助你顺利实现远程数据库管理