要在本地或远程客户端连接宝塔面板管理的 MySQL/MariaDB 数据库,核心逻辑其实就两步:放行端口和授权用户。
很多人只做了第二步忘了第一步,或者反过来,导致连不上。下面我把最稳妥、最常用的方案拆解一下,顺便提几个坑。
1. 基础设置:在宝塔面板里操作
登录你的宝塔 Web 面板,按顺序执行以下操作:
第一步:修改数据库密码(建议)
虽然不强制改密码才能远程连接,但为了安全,建议先确认或重置一个强密码。
- 进入【数据库】菜单。
- 找到你要连接的数据库,点击右侧的【权限】。
- 这里可以看到当前的访问权限设置。
第二步:设置数据库访问权限(关键)
这是最容易出错的地方。默认情况下,所有新建的数据库权限都是“仅限本机”或“指定IP”。
- 在数据库列表,点击对应数据库右侧的【权限】按钮。
- 将“访问权限”从 “仅允许本机” 改为 “所有人”。
- 注意:如果你追求极致安全,可以选择“指定IP”,然后填入你本地电脑的公网 IP。但大多数开发场景为了方便,直接选“所有人”即可。
- 保存设置。
第三步:放行服务器安全组/防火墙端口
这一步分两种情况,取决于你的服务器环境:
情况 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。
解决方法:
- 在宝塔面板进入【数据库】-> 点击【phpMyAdmin】或直接通过 SSH 登录服务器。
- 登录 MySQL 命令行。
- 执行以下 SQL 命令,将用户的认证方式改回旧的兼容模式:
-- 假设用户名是 root,主机是 % (代表所有IP) ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES; - 如果是新创建的普通用户,创建时也要指定:
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。这意味着它只监听本地回环地址,拒绝外部连接。
解决方法:
- 用 SSH 登录服务器。
- 编辑配置文件:
vi /etc/my.cnf(路径可能因系统而异)。 - 找到
bind-address,将其注释掉(前面加#)或者改为0.0.0.0。 - 重启 MySQL 服务:
systemctl restart mysqld或service mysql restart。- 提示:宝塔面板通常会自动处理这个配置,手动安装 MySQL 才容易遇到这个问题。
坑三:本地网络或公司防火墙
如果你在公司内网,公司的出口防火墙可能会屏蔽 3306 端口。可以尝试用手机热点测试,如果热点能连,那就是公司网络的问题。
3. 最佳实践建议(重要)
虽然“所有人”权限方便调试,但在生产环境中,强烈建议:
-
不要直接用 root 账户远程连接。
- 在宝塔【数据库】->【权限】里,创建一个专用的新用户(比如
app_user),只赋予特定数据库的操作权限。 - 将这个新用户的访问权限设置为“指定IP”(即你本地电脑的公网 IP)。
- 这样即使密码泄露,攻击者也无法从其他 IP 登录,且只能访问必要的库。
- 在宝塔【数据库】->【权限】里,创建一个专用的新用户(比如
-
使用 SSH 隧道(更安全、更推荐)
- 如果不想暴露 3306 端口到公网,可以使用 Navicat、DBeaver 等工具的 SSH 通道 功能。
- 填写服务器的 SSH 账号密码(或密钥),然后在数据库连接信息里,Host 填
127.0.0.1,端口3306。 - 这样流量是通过 SSH 加密隧道的,不需要开放 3306 端口,安全性极高,且不受云厂商安全组限制。
总结 Checklist
- [ ] 宝塔数据库权限改为“所有人”或“指定IP”。
- [ ] 云厂商安全组放行 3306/TCP。
- [ ] 宝塔面板安全组放行 3306/TCP(如果是非云主机)。
- [ ] 检查 MySQL 认证插件是否为
mysql_native_password(针对老客户端)。 - [ ] 检查
my.cnf是否绑定了127.0.0.1。
按这个流程走,基本不会翻车。
云技术博客