为服务运行的laravel项目在本地连接云实例

时间:2018-07-18 08:49:37

标签: google-app-engine laravel-5 google-cloud-platform google-cloud-sql

我正在尝试将Laravel本地连接到Google mysql实例。

.env文件

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:GptV9AIxUX7TuPkKxbLs54DLjivt2wCmuG37qsnqxJU=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=**********
DB_USERNAME=**********
DB_PASSWORD=**********
DB_SOCKET=/cloudsql/[INSTANCE NAME]
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

我正在使用以下cloud_sql_proxy命令:

~/Downloads/cloud_sql_proxy -instances=/cloudsql/[INSTANCE_ID]=tcp:3306

它可以正常工作,

2018/07/18 13:46:29 Listening on 127.0.0.1:3306 for /cloudsql/[INSTANCE ID]
2018/07/18 13:46:29 Ready for new connections

我还为我的项目启用了 Google Cloud SQL Cloud SQL Admin API

我收到的错误是:

SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from `campaigns`)

以下是我在寻找解决方案的努力中的观察。

  1. 在我看到的Stackdriver记录错误中

    严重性:“ ERROR” textPayload:“ 2018-07-18T05:57:08.204597Z 859643 [Note]中止与数据库859643的连接:'[DB_NAME]'用户:'[DB_USER]'主机:'cloudsqlproxy〜173.194.90.33'(读取通讯时出错包)”

  2. 当我检查~/Downloads/cloud_sql_proxy info时:

    2018/07/18 14:10:50使用gcloud的活动项目:[PROJECT ID] 2018/07/18 14:10:55 必须设置-dir:为[INSTANCE NAME]使用unix套接字

如果这与错误有关,我实际上无法联系。

  1. 我尝试使用服务帐户连接cloud sql,它可以正确连接,但仍然无法解决此问题。

先谢谢了。

1 个答案:

答案 0 :(得分:2)

有两种连接到Cloud SQL的方法:通过TCP或通过Unix套接字。

如果使用的是Unix套接字,则需要指定-dir /cloudsql(或类似名称)作为创建套接字的目录。完整命令如下所示:

./cloud_sql_proxy -dir=/cloudsql -instances=myProject:uscentral1:myInstance

然后您将使用DB_SOCKET=/cloudsql/myProject:uscentral1:myInstance进行连接。 (您不需要主机或端口-您正在通过Unix套接字进行连接)

如果使用的是TCP,请应用要侦听实例名称的端口。因此,命令如下所示:

./cloud_sql_proxy -instances=myProject:us-central1:myInstance=tcp:3306

在这种情况下,您使用DB_HOST=127.0.0.1DB_PORT=3306(但不能使用DB_SOCKET)。