我已经阅读了类似的问题,并尝试了他们所说的内容,但我无法让我的 App Engine 应用程序连接到我的 Cloud SQL 实例。
这是我发现的应该是正确的:
索引.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实例位于同一项目中,因此这应该不是问题。
正如在这篇类似的帖子中提到的,如果你想将你的谷歌应用引擎连接到云SQL,你需要启用云SQL代理,因为谷歌应用引擎通过代理从谷歌服务器内部连接到你的云SQL实例。
如果您不想使用云 SQL 代理,则需要从云 SQL 实例授权您的 IP,如下所示。
我希望这有所帮助。
好吧,我最终通过删除该实例并创建一个新实例来使其工作。我发布的步骤是一样的。我对为什么它之前不起作用的唯一猜测可能是当我为最后一个创建私有 IP 地址时,系统禁用了通过 unix 套接字连接。我想不出还有什么可能造成这个问题的。
最后,它确实像我认为的那样工作。我不需要使用代理或通过额外的步骤来授予应用程序的权限。所以,我说得对,只是出于某种原因它不起作用。但是,删除旧的 SQL 实例并创建一个新实例是有效的。