【问题标题】:GCP CloudSQL Access from same GCP Project without Proxy来自相同 GCP 项目的 GCP CloudSQL 访问,无需代理
【发布时间】:2019-03-13 06:02:35
【问题描述】:

我完全被我认为可能很简单的事情所困扰。在学习如何使用 Cloud SQL 时,我一直在寻找这几天,但没有运气。应用引擎上有很多示例,但几乎没有关于将 GCP 虚拟机连接到 GCP Cloud SQL 的简单性。 Google 的说明似乎并不完整。这是我所拥有的:

在同一个 GCP 项目中,我创建了一个 Bitnami LAMP 虚拟机。在同一个项目中,我创建了一个带有单个数据库和两个表的 CloudSQL 实例。我的意图是尝试通过虚拟机中的 PHP 脚本访问 CloudSQL。 (是的,我知道我可以在 VM 上设置 SQL 服务器,但我的目的是学习如何访问 CloudSQL)。注意,一切都在同一个 GCP 项目中,所以据我所知,我不应该使用 SQL 代理。

我也在项目中启用了 CloudSQL API。

<?php
$DB_NAME = "dwelling_winebot";
$DB_USER = "winebot_reader";
$DB_PASS = "winebot_reader";
$tableName = "wines";
$mysqli = new mysqli(null, $DB_USER, $DB_PASS, $DB_NAME,null, "/cloudsql/web-sites-123456:us-central1:winebot");

... More code below

我在 apache error_log 中得到的错误是:

[08-Oct-2018 05:00:24 America/Los_Angeles] PHP Warning:  mysqli::__constru
ct(): (HY000/2002): No such file or directory in /opt/bitnami/apache2/htdo
cs/winebot/serverside/inforunner.php on line 25

(顺便说一下,第 25 行是 $mysqli 行,php 文件名是 inforunner.php,上面有 php 代码)

值得注意的事实:

  • 如果我运行“gcloud sql 实例
    ,我可以看到数据库实例 描述葡萄酒机器人”
    • 我已经创建了一个名为 winebot_reader 的用户...说这个我还尝试了 'root' 使用 "" 密码作为一些文档 建议。不走运。
    • cloudsql 实例名称实际上是来自控制台的正确项目名称、区域和数据库。
    • 我似乎没有像某些文档建议的那样有一个带有套接字路径的本地 /cloudsql 文件夹?
    • 根据控制台,CloudSQL API 已开启
    • 在mysqli调用的location字段(第一个参数)我试过了,null,localhost,127.0.0.1。所有的结果都是一样的。

任何帮助将不胜感激。

【问题讨论】:

    标签: php google-cloud-platform google-cloud-sql


    【解决方案1】:

    使用内部 IP 代替不存在的套接字。

    参考Connecting MySQL Client from Compute Engine

    【讨论】:

    • 哇!这非常容易。所以我使用了一个私有 IP(测试版),并完全删除了套接字引用并且它起作用了。那么,为什么 Google 指令会强制使用套接字地址呢?只是好奇。无论哪种方式,它现在完全有效。谢谢!
    • @mumcs01 UNIX 域套接字用于同一主机上的进程间通信 - CloudSQL 几乎不会出现这种情况(作为另一台主机上的托管服务)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2020-08-26
    • 1970-01-01
    相关资源
    最近更新 更多