努力
加油

添加远程服务器连接宝塔数据库需要开启哪些设置?

要在本地或远程客户端连接宝塔面板管理的 MySQL/MariaDB 数据库,核心逻辑其实就两步:放行端口和授权用户。

很多人只做了第二步忘了第一步,或者反过来,导致连不上。下面我把最稳妥、最常用的方案拆解一下,顺便提几个坑。

1. 基础设置:在宝塔面板里操作

登录你的宝塔 Web 面板,按顺序执行以下操作:

第一步:修改数据库密码(建议)

虽然不强制改密码才能远程连接,但为了安全,建议先确认或重置一个强密码。

  • 进入【数据库】菜单。
  • 找到你要连接的数据库,点击右侧的【权限】。
  • 这里可以看到当前的访问权限设置。

第二步:设置数据库访问权限(关键)

这是最容易出错的地方。默认情况下,所有新建的数据库权限都是“仅限本机”或“指定IP”。

  1. 在数据库列表,点击对应数据库右侧的【权限】按钮。
  2. 将“访问权限”从 “仅允许本机” 改为 “所有人”。
    • 注意:如果你追求极致安全,可以选择“指定IP”,然后填入你本地电脑的公网 IP。但大多数开发场景为了方便,直接选“所有人”即可。
  3. 保存设置。

第三步:放行服务器安全组/防火墙端口

这一步分两种情况,取决于你的服务器环境:

情况 A:云服务器(阿里云、腾讯云、华为云等)

  • 必须去云厂商的控制台操作! 宝塔面板里的防火墙规则只管系统层,不管云平台层。
  • 登录云厂商控制台 -> 找到你的 ECS/CVM 实例 -> 【安全组】配置。
  • 添加入方向规则:
    • 协议:TCP
    • 端口:3306(MySQL默认)或 2888(MariaDB默认,看你在宝塔装的是哪个)
    • 源 IP:0.0.0.0/0(表示允许所有IP,如果是指定IP则填具体IP)
    • 策略:允许

情况 B:自建机房或非云主机

  • 需要在宝塔面板中放行端口。
  • 进入宝塔面板左侧菜单 -> 【安全】。
  • 添加放行规则:端口 3306(或你的数据库端口),协议 TCP,备注写“MySQL远程”。

2. 进阶检查:如果还是连不上?

按照上面两步做完,90% 的情况能连上。如果不行,排查以下几个常见坑:

坑一:MySQL 版本差异导致的认证插件问题

高版本的 MySQL(5.7+ / 8.0+)默认使用 caching_sha2_password 认证插件,而一些老旧的客户端工具(如旧版 Navicat、某些 PHP 框架自带的 DB 类库)不支持这种加密方式,会报错 Authentication plugin not supported。

解决方法:

  1. 在宝塔面板进入【数据库】-> 点击【phpMyAdmin】或直接通过 SSH 登录服务器。
  2. 登录 MySQL 命令行。
  3. 执行以下 SQL 命令,将用户的认证方式改回旧的兼容模式:
    -- 假设用户名是 root,主机是 % (代表所有IP)
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
    FLUSH PRIVILEGES;
  4. 如果是新创建的普通用户,创建时也要指定:
    CREATE USER 'newuser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'%';
    FLUSH PRIVILEGES;

坑二:bind-address 绑定限制

有些 Linux 发行版在安装 MySQL 时,配置文件 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf 中可能写了 bind-address = 127.0.0.1。这意味着它只监听本地回环地址,拒绝外部连接。

解决方法:

  1. 用 SSH 登录服务器。
  2. 编辑配置文件:vi /etc/my.cnf (路径可能因系统而异)。
  3. 找到 bind-address,将其注释掉(前面加 #)或者改为 0.0.0.0。
  4. 重启 MySQL 服务:systemctl restart mysqld 或 service mysql restart。
    • 提示:宝塔面板通常会自动处理这个配置,手动安装 MySQL 才容易遇到这个问题。

坑三:本地网络或公司防火墙

如果你在公司内网,公司的出口防火墙可能会屏蔽 3306 端口。可以尝试用手机热点测试,如果热点能连,那就是公司网络的问题。


3. 最佳实践建议(重要)

虽然“所有人”权限方便调试,但在生产环境中,强烈建议:

  1. 不要直接用 root 账户远程连接。

    • 在宝塔【数据库】->【权限】里,创建一个专用的新用户(比如 app_user),只赋予特定数据库的操作权限。
    • 将这个新用户的访问权限设置为“指定IP”(即你本地电脑的公网 IP)。
    • 这样即使密码泄露,攻击者也无法从其他 IP 登录,且只能访问必要的库。
  2. 使用 SSH 隧道(更安全、更推荐)

    • 如果不想暴露 3306 端口到公网,可以使用 Navicat、DBeaver 等工具的 SSH 通道 功能。
    • 填写服务器的 SSH 账号密码(或密钥),然后在数据库连接信息里,Host 填 127.0.0.1,端口 3306。
    • 这样流量是通过 SSH 加密隧道的,不需要开放 3306 端口,安全性极高,且不受云厂商安全组限制。

总结 Checklist

  1. [ ] 宝塔数据库权限改为“所有人”或“指定IP”。
  2. [ ] 云厂商安全组放行 3306/TCP。
  3. [ ] 宝塔面板安全组放行 3306/TCP(如果是非云主机)。
  4. [ ] 检查 MySQL 认证插件是否为 mysql_native_password(针对老客户端)。
  5. [ ] 检查 my.cnf 是否绑定了 127.0.0.1。

按这个流程走,基本不会翻车。