努力
加油

配置宝塔数据库让外部服务器连接的方法是什么?

要想让外部服务器(比如阿里云 ECS、腾讯云 CVM 或者其他 VPS)能连上宝塔面板里的 MySQL/MariaDB 数据库,核心就两步:放行端口 + 授权用户。

很多人卡在第一步或者第二步没做对。下面我把最稳妥、最常见的几种情况拆解一下,按顺序操作即可。

1. 基础准备:确认环境

首先,你得确定你用的是哪种数据库。宝塔默认装的是 MySQL 5.7 或 8.0,也有 MariaDB。

  • MySQL 8.0+:认证插件改成了 caching_sha2_password,老版本的客户端(如某些旧版 Navicat、PHP 代码库)可能会报错 Authentication plugin not supported。如果遇到这个问题,后面会讲怎么改回旧版兼容模式。
  • 防火墙/安全组:这是最容易忽略的坑。宝塔有自己的“系统防火墙”,但云服务器厂商(阿里、腾讯、华为等)还有自己的“云防火墙/安全组”。只开宝塔防火墙没用,必须同时在云控制台开端口。

2. 具体操作步骤

第一步:修改数据库密码并开启远程访问权限(在宝塔面板内操作)

  1. 登录宝塔面板。
  2. 进入左侧菜单 【数据库】 -> 点击你要开放的数据库名旁边的 【管理】。
  3. 切换到 【权限】 选项卡。
  4. 你会看到“允许本地连接”和“允许远程连接”。
    • 选择 “允许所有主机”(最简单粗暴,适合测试或非生产环境)。
    • 或者选择 “指定IP”,填入你外部服务器的公网 IP(更安全,推荐生产环境用这个)。
  5. 点击 【保存】。
  6. 关键点:如果之前设置过密码,这里最好重新设置一个强密码,确保生效。

注意:如果你选的是“指定IP”,请确保你填的是外部服务器真实的公网 IP,而不是内网 IP。

第二步:配置宝塔系统防火墙

  1. 在宝塔面板左侧菜单,找到 【安全】。
  2. 查看端口列表中是否有 3306(MySQL 默认端口)或 3307(MariaDB 默认端口)。
  3. 如果没有,点击 【添加规则】:
    • 端口号:3306
    • 备注:MySQL Remote
    • 来源:0.0.0.0/0 (表示允许所有 IP,或者你可以填特定 IP 段)
  4. 点击 【放行】。

第三步:配置云服务器厂商的安全组(最重要的一步!)

这一步90%的人都会忘。假设你在阿里云:

  1. 登录阿里云控制台 -> ECS 实例 -> 找到你的服务器。
  2. 点击 【安全组】 -> 【配置规则】。
  3. 点击 【手动添加】 或 【快速创建规则】:
    • 方向:入方向
    • 协议类型:自定义 TCP
    • 端口范围:3306/3306
    • 授权对象:0.0.0.0/0 (测试用)或 填写外部服务器的公网 IP
    • 优先级:1
  4. 点击确定。

腾讯云、华为云等操作类似,都是在控制台里找“安全组”或“网络ACL”,放行 TCP 3306 端口。

第四步:验证连接

使用外部服务器上的工具测试连接:

  • Linux 命令行:
    mysql -h <宝塔服务器公网IP> -P 3306 -u root -p
  • Windows Navicat/DBeaver:
    新建连接,输入宝塔服务器的公网 IP、用户名(通常是 root)、密码,测试连接。

3. 常见问题排查(踩坑指南)

Q1: 连接超时 (Connection Timed Out)

  • 原因:防火墙没开,或者云安全组没开。
  • 解决:检查宝塔【安全】面板是否放行了 3306;检查云控制台【安全组】是否放行了 3306。两个都要开!

Q2: Access denied for user ‘root’@’xxx’ (Access Denied)

  • 原因:密码错误,或者你在宝塔里没给该用户授权远程访问。
  • 解决:回到宝塔【数据库】->【权限】,确认是否选择了“允许所有主机”或添加了正确的外部 IP。

Q3: Authentication plugin ‘caching_sha2_password’ cannot be loaded (MySQL 8.0 特有)

  • 原因:MySQL 8.0 默认用了新的加密方式,老客户端不支持。
  • 解决:
    1. 在宝塔【数据库】->【管理】->【SQL 语句】中执行以下命令(将 your_password 替换为你的实际密码):
      ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
      FLUSH PRIVILEGES;
    2. 或者,在宝塔【软件商店】卸载当前 MySQL,重装时选择兼容模式(部分版本支持),或者直接接受新协议,升级你的客户端工具(如新版 Navicat、JDBC 驱动等)。

Q4: 为什么我改了权限还是连不上?

  • 检查宝塔面板的【终端】里,直接 telnet <宝塔服务器公网IP> 3306 看通不通。如果都不通,肯定是网络层问题(防火墙/安全组)。
  • 检查宝塔的 /etc/my.cnf 文件,看看有没有 bind-address = 127.0.0.1。如果有,注释掉它,然后重启 MySQL 服务。不过宝塔通常会自动处理这个,一般不需要手动改。

4. 安全建议(重要!)

虽然上面说了“允许所有主机”,但在生产环境中,强烈不建议这样做。

  • 最佳实践:在宝塔【数据库】->【权限】中,选择 “指定IP”,只填入你需要连接的几台外部服务器的公网 IP。
  • 额外加固:如果可能,使用 SSH 隧道来连接数据库,而不是直接暴露 3306 端口到公网。这样即使端口被扫描,也无法直接连接。

总结:宝塔面板设权限 + 宝塔防火墙放行 + 云安全组放行 = 成功连接。 三者缺一不可。