从本地开发服务器连接到 google 云 sql

Connect to google cloud sql from local development server

我刚刚开始使用 google appengine。我正在 php 开发应用程序。如果我想看到结果,我使用

dev_appserver.py ./ --php_executable_path /usr/bin/php5-cgi

(对我来说没有 --php_executable_path 参数是行不通的)
它工作正常,除了我无法连接到云 sql 实例。我读了这个 https://cloud.google.com/appengine/docs/php/cloud-sql 并尝试通过以下方式连接到云 sql:

$sql = new mysqli(null,
  'root', // username
  '',     // password
  ,
  null,
  '/cloudsql/:'
  );

如果我将某些东西部署到 appengine,这可以工作,但是如果我需要在本地调试应用程序并且它取决于数据库,我该怎么办?

https://cloud.google.com/appengine/docs/php/cloud-sql/#PHP_Using_a_local_MySQL_instance_during_development

The Guestbook example above shows how your application can connect to a Cloud SQL instance when the code runs in App Engine and connect to a local MySQL server when the code runs in the Development Server. We encourage this pattern to minimize confusion and maximize flexibility.

@DTing 的回答是正确的,Google 的文档鼓励您使用来自本地开发服务器的本地 MySQL 并推荐该模式。

但是,如果您不同意并希望 运行 开发服务器针对您在云中的 "production" SQL,也支持(只是不鼓励,因为开发过程中存在错误可能会破坏您的生产数据!)。

具体来说,您遵循 https://cloud.google.com/sql/docs/getting-started#work 处的一般说明并由 https://cloud.google.com/sql/docs/getting-started#work 指出(忽略特定于应用程序引擎的部分):确保您的 Cloud SQL 实例具有 IP 地址,启用outside-visible 你工作站的 IP 地址,确保 SQL 实例有一个 root 密码——然后检查一切是否在命令行 MySQL 客户端上工作,例如

[[注意:要验证您工作站的 外部可见 IP 地址,请使用例如浏览器访问 http://checkmyip.com/ ]]

$ mysql --host=INSTANCE_IP --user=root --password

一旦一切设置正确,您只需按照 https://cloud.google.com/appengine/docs/php/cloud-sql/#PHP_Using_a_local_MySQL_instance_during_development 中的说明进行操作即可:

To connect to a Cloud SQL instance from your development environment, substitute "127.0.0.1" with the instance IP address. You do not use the "/cloudsql/"-based connection string to connect to a Cloud SQL instance if your App Engine app is running locally in the Development Server.

If you want to use the same code locally and deployed, you can use a Special $_SERVER keys variable (SERVER_SOFTWARE) to determine where your code is running. This approach is shown below.

例如,如果您的 Cloud SQL 的 IP 地址是 12.34.56.78,您将使用

$sql = new mysqli('12.34.56.78:3306',
  '<username>',
  '<password>',
  <database-name>
  );

$_SERVER['SERVER_SOFTWARE'] 未设置或不包含 Google App Engine 时(这意味着您在本地开发服务器上 运行ning)。