如何使用PHP远程连接GCP虚拟机上的MySQL数据库

来源:AI编程作者:马来西亚程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《如何使用PHP远程连接GCP虚拟机上的MySQL数据库》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何使用PHP远程连接GCP虚拟机上的MySQL数据库》有用,将其分享出去将是对创作者最好的鼓励。

在PHP应用开发中,远程连接GCP虚拟机上的MySQL数据库是很多项目的常见需求,整个过程需要同时配置GCP网络规则、MySQL服务权限和PHP连接参数,缺少任何一步都可能导致连接失败。

如何使用PHP远程连接GCP虚拟机上的MySQL数据库

前置准备

首先需要确保你已经完成以下准备工作:

  • 已经在GCP上创建好虚拟机实例,并且成功安装了MySQL服务
  • 虚拟机的外部IP已经获取,并且可以正常通过SSH登录到虚拟机
  • 本地或者部署PHP应用的服务器可以正常访问公网

第一步:配置GCP虚拟机防火墙规则

GCP默认会拦截外部对虚拟机非标准端口的访问,需要先开放MySQL的3306端口(如果修改过MySQL端口则开放对应端口)。

登录GCP控制台,进入虚拟机实例详情页,找到防火墙规则配置入口,添加一条入站规则:

  • 协议:TCP
  • 端口:3306
  • 来源IP范围:填写你的PHP应用所在服务器的公网IP,如果要允许所有IP访问可以填0.0.0.0/0,但生产环境不建议这样配置
  • 规则名称:自定义即可,比如mysql-remote-access

第二步:配置MySQL允许远程连接

默认情况下MySQL只允许本地连接,需要修改配置并授权用户远程访问权限。

修改MySQL绑定地址

登录到GCP虚拟机,编辑MySQL的配置文件,不同系统路径可能不同,常见路径为/etc/mysql/mysql.conf.d/mysqld.cnf或者/etc/my.cnf。

找到bind-address配置项,默认是127.0.0.1,将其修改为0.0.0.0,表示允许所有IP连接,修改后保存文件,重启MySQL服务:

# 重启MySQL服务,不同系统命令可能不同
sudo systemctl restart mysql

授权MySQL用户远程访问权限

登录到MySQL命令行,执行以下命令授权用户远程访问,假设你要使用的数据库用户是remote_user,密码是your_password,允许的访问IP是PHP应用服务器的公网IP,如果要允许所有IP可以替换为%:

-- 创建用户并授权,允许指定IP访问所有数据库
CREATE USER 'remote_user'@'PHP应用服务器公网IP' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'PHP应用服务器公网IP' WITH GRANT OPTION;
-- 刷新权限使配置生效
FLUSH PRIVILEGES;

第三步:编写PHP连接代码

完成前面的配置后,就可以编写PHP代码测试远程连接了,这里使用PDO扩展实现连接,兼容性更好。

<?php
// 配置连接参数
$dbHost = 'GCP虚拟机外部IP'; // 替换为你的GCP虚拟机外部IP
$dbPort = 3306; // MySQL端口,默认3306
$dbName = 'test_db'; // 要连接的数据库名,替换为实际数据库名
$dbUser = 'remote_user'; // 前面授权的MySQL用户名
$dbPass = 'your_password'; // 对应的密码

try {
    // 创建PDO连接实例
    $dsn = "mysql:host=$dbHost;port=$dbPort;dbname=$dbName;charset=utf8mb4";
    $pdo = new PDO($dsn, $dbUser, $dbPass);
    // 设置错误模式为异常,方便排查问题
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "PHP远程连接GCP虚拟机MySQL数据库成功";
    
    // 测试查询示例
    $stmt = $pdo->query("SELECT VERSION() as mysql_version");
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    echo "<br>MySQL版本:" . $result['mysql_version'];
} catch (PDOException $e) {
    echo "连接失败:" . $e->getMessage();
}
?>

常见连接问题排查

如果连接失败,可以按照以下步骤排查:

  • 检查GCP防火墙规则是否生效,是否允许对应IP访问3306端口
  • 检查MySQL的bind-address是否已经修改为0.0.0.0,并且服务已经重启
  • 检查MySQL用户授权是否正确,是否允许当前PHP应用服务器的IP访问
  • 检查PHP服务器是否可以ping通GCP虚拟机的外部IP,排除网络不通的问题
  • 查看MySQL的错误日志,通常路径为/var/log/mysql/error.log,里面会有详细的连接失败原因

安全注意事项

生产环境中不建议直接将MySQL端口开放到公网,更安全的做法是:

  • 使用GCP的内部网络或者VPN实现内网连接,避免端口暴露在公网
  • 严格限制允许访问MySQL的IP范围,不要使用0.0.0.0/0允许所有IP
  • 使用强密码,并且定期更换数据库用户密码
  • 只授予应用所需的最小数据库权限,不要使用ALL PRIVILEGES

PHPMySQLGCP_虚拟机远程连接修改时间:2026-06-05 03:30:36

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。