在腾讯云轻量应用服务器(Lighthouse)上部署 MySQL 后,默认只允许本地连接。要开启远程访问,需要同时完成 MySQL 内部配置、系统防火墙设置 和 腾讯云安全组规则 三个步骤。
以下是详细操作指南:
第一步:修改 MySQL 用户权限(核心步骤)
默认情况下,MySQL 的 root 用户或普通用户通常只允许从 localhost 登录。你需要创建一个允许远程连接的用户,或者修改现有用户的 host 属性。
-
登录 MySQL
mysql -u root -p(输入密码后进入命令行)
-
创建/授权远程用户(推荐方式)
建议新建一个专用账号用于远程连接,而不是直接开放 root 权限,以提高安全性。执行以下 SQL 语句(请替换为你的实际信息):
-- 创建用户 'myuser' (密码设为 'YourStrongPassword'),允许任意 IP 访问 CREATE USER 'myuser'@'%' IDENTIFIED BY 'YourStrongPassword'; -- 赋予所有数据库权限 GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION; -- 刷新权限使配置生效 FLUSH PRIVILEGES;注:如果你必须使用
root远程登录(不推荐),可将'myuser'替换为'root',但请务必设置强密码。 -
退出 MySQL
EXIT;
第二步:配置系统防火墙(Linux 自带)
如果你的服务器安装了 ufw 或 firewalld,需要放行 3306 端口。
情况 A:使用 Ubuntu/Debian (ufw)
# 允许 3306 端口
sudo ufw allow 3306/tcp
# 重新加载防火墙
sudo ufw reload
情况 B:使用 CentOS/RHEL (firewalld)
# 添加 3306 端口
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重载防火墙
sudo firewall-cmd --reload
情况 C:无防火墙或已关闭
如果未安装上述工具,通常无需额外操作,但需确保 /etc/my.cnf 配置正确(见下一步)。
第三步:检查 MySQL 配置文件 (my.cnf)
确保 MySQL 没有绑定到 127.0.0.1 或注释掉监听地址。
-
编辑配置文件
# Ubuntu/Debian sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf # CentOS/RHEL sudo vim /etc/my.cnf -
查找并修改
bind-address
找到类似bind-address = 127.0.0.1的行:- 方案一(推荐):将其注释掉或删除该行。
# bind-address = 127.0.0.1 - 方案二:改为
0.0.0.0(表示监听所有网卡)。bind-address = 0.0.0.0
- 方案一(推荐):将其注释掉或删除该行。
-
重启 MySQL 服务
# Ubuntu/Debian sudo systemctl restart mysql # CentOS/RHEL sudo systemctl restart mysqld
第四步:配置腾讯云控制台安全组(关键步骤)
这是轻量服务器最容易遗漏的一步。即使 MySQL 和系统防火墙都开了,如果腾讯云安全组没放行,外部依然无法连接。
- 登录 腾讯云控制台。
- 进入 轻量应用服务器 页面,点击你的实例。
- 在左侧菜单或右侧详情页找到 安全组(或直接点击“防火墙”标签页)。
- 点击 手动配置 -> 添加规则。
- 填写以下信息:
- 协议类型:TCP
- 端口范围:3306
- 授权对象:
0.0.0.0/0(允许所有 IP) 或指定你自己的公网 IP (更安全)。 - 策略:允许
- 保存规则。
第五步:验证与测试
完成上述步骤后,在你的本地电脑(Windows/Mac/Linux)上使用客户端工具(如 Navicat, DBeaver, 或命令行)进行连接测试。
- 主机/IP:服务器的公网 IP
- 端口:3306
- 用户名:刚才创建的
myuser - 密码:设置的密码
常见排查提示:
- 如果提示
Connection refused:通常是 MySQL 未启动、bind-address未改、或系统防火墙/安全组未放行。 - 如果提示
Access denied:说明网络通了,但用户名、密码错误或该用户没有远程权限(检查第一步中的GRANT语句)。 - 安全建议:生产环境不建议将安全组的
0.0.0.0/0长期开放给 3306 端口,建议仅对你本地的固定 IP 开放,或使用 SSH 隧道(SSH Tunneling)进行加密连接。
PHPWP博客