在同一项目中,使用mysqli将App Engine应用连接到Google SQL实例

时间:2019-12-28 21:30:23

标签: php mysql google-app-engine google-cloud-platform google-cloud-sql

我已经阅读了类似的问题,并且尝试了他们所说的内容,但是我无法让App Engine应用程序连接到Cloud SQL实例。

以下是我发现的正确信息:

index.php

$servername = null;
$username = "root";
$password = "rootPassword";
$database = "NewApp";
$port = null;
$socket = "/cloudsql/newapp-edc:us-central1:newapp0";

$connection = new mysqli($servername,
                $username,
                $password,
                $database,
                $port,
                $socket);

app.yaml

runtime: php72

entrypoint: serve index.php

env_variables:
    # Replace USER, PASSWORD, DATABASE, and CONNECTION_NAME with the
    # values obtained when configuring your Cloud SQL instance.
    MYSQL_USER: root
    MYSQL_PASSWORD: rootPassword
    MYSQL_DSN: mysql:dbname=NewApp;unix_socket=/cloudsql/newapp-edc:us-central1:newapp0

# Use the connection name obtained when configuring your Cloud SQL instance.
beta_settings:
    cloud_sql_instances: "newapp-edc:us-central1:newapp0"

我已经经历了所有类似的问题和答案以及所有相关的Google文档,但我找不到答案。

当前方法的结果为“ Connection refused”,这意味着,我认为我已经像前面说的“ No such file or directory那样正确设置了套接字。”一切似乎都是正确的,并且我拥有同一个项目中所有应用程序的权限,并且App Engine应用程序和Cloud SQL实例位于同一个项目中,所以这不应该成为问题。

2 个答案:

答案 0 :(得分:0)

就像在类似的post中所述,如果您要将Google App Engine连接到Cloud SQL,则需要启用Cloud SQL代理,因为Google App Engine从内部连接代理通过Google服务器将其连接到您的Cloud SQL实例。

如果您不想使用Cloud SQL代理,则需要从Cloud SQL实例授权IP,如here.

我希望这会有所帮助。

答案 1 :(得分:0)

好吧,我最终通过删除该实例并创建一个新实例来使其正常工作。我发布的步骤是相同的​​。我唯一的猜测是为什么以前不起作用,也许是当我为最后一个创建专用IP地址时,系统禁止通过UNIX套接字进行连接。我想不出其他任何可能造成该问题的方法。

最后,它确实按照我认为的方式工作。我不需要使用代理,也不需要执行其他步骤即可为应用授予权限。所以,我说对了,只是出于某种原因,它没有用。但是,删除旧的SQL实例并创建一个新的SQL实例是可行的。