我已经阅读了类似的问题,并且尝试了他们所说的内容,但是我无法让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实例位于同一个项目中,所以这不应该成为问题。
答案 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实例是可行的。