无法在 Google Cloud SQL 中运行迁移

Posted

技术标签:

【中文标题】无法在 Google Cloud SQL 中运行迁移【英文标题】:Can't run migrations in Google Cloud SQL 【发布时间】:2020-10-25 04:23:36 【问题描述】:

我正在使用 Laravel 5.3,并按照本教程设置自己的 Google Cloud:

https://cloud.google.com/community/tutorials/run-laravel-on-appengine-standard

我正在尝试运行我的数据库迁移,所以我这样做了:

export DB_DATABASE=db DB_USERNAME=root DB_PASSWORD=<my_db_password> DB_SOCKET="<my_connection_name>"
php artisan migrate --force

但我在终端中得到以下输出:

[照亮\数据库\查询异常] SQLSTATE[HY000] [2002] 没有这样的文件或目录 (SQL: select * from inform ation_schema.tables 其中 table_schema = db 和 table_name = 迁移)

[Doctrine\DBAL\Driver\PDOException] SQLSTATE[HY000] [2002] 没有这样的文件或目录

[PDO异常] SQLSTATE[HY000] [2002] 没有这样的文件或目录

如果我尝试通过 mysql Workbench 连接到服务器,它可以正常连接。

这是我的 app.yaml 文件(我删除了敏感信息):

runtime: php72

runtime_config:
    document_root: public

env_variables:
    APP_LOG: errorlog
    # Application key
    APP_KEY: <my_app_key>
    # Storage path
    APP_STORAGE: /tmp
    VIEW_COMPILED_PATH: /tmp
    CACHE_DRIVER: database
    SESSION_DRIVER: database
    # Database configuration
    DB_CONNECTION: mysql
    DB_SOCKET: /cloudsql/<my_connection_name>
    DB_HOST: 127.0.0.1
    DB_PORT: 3306
    DB_DATABASE: db
    DB_USERNAME: root
    DB_PASSWORD: <my_db_password>

beta_settings:
    cloud_sql_instances: "<my_connection_name>"

我也尝试将127.0.0.1 更改为localhost,但我得到了同样的错误。

我做错了什么??

【问题讨论】:

这能回答你的问题吗? PHP Connection failed: SQLSTATE[HY000] [2002] Connection refused 不,它没有 撞车?请帮帮我 你找到解决办法了吗? 还没有,不幸的是@mikegross 【参考方案1】:

不要在 MySQL 连接的环境变量中包含 DB_HOST,如Set up Database Sessions 的第 4 步所示

这背后的原因是你的机器上使用 127.0.0.1 是因为你可能在你的机器上安装了 MySQL 并且它正在那里连接。

【讨论】:

【参考方案2】:

尝试在没有 DB_SOCKET 选项的情况下连接到数据库。错误消息表明尝试了通过套接字的 MySQL 连接(不支持)。

【讨论】:

【参考方案3】:

使用下面的 app.yaml 配置

runtime: php
env: flex

runtime_config:
  document_root: public

# Ensure we skip ".env", which is only for local development
skip_files:
  - .env
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10
env_variables:
# Put production environment variables here.
 APP_LOG: errorlog
 APP_KEY: key
 CACHE_DRIVER: database
 SESSION_DRIVER: database
 ## Set these environment variables according to your CloudSQL 
 configuration.
 DB_HOST: localhost
 DB_DATABASE: dbname
 DB_USERNAME: username
 DB_PASSWORD: db_password
 DB_SOCKET: "/cloudsql/connection_name"

beta_settings:
# for Cloud SQL, set this value to the Cloud SQL connection name,
# e.g. "project:region:cloudsql-instance"
cloud_sql_instances: "connection_name"

【讨论】:

以上是关于无法在 Google Cloud SQL 中运行迁移的主要内容,如果未能解决你的问题,请参考以下文章

Google App Engine .Net Core 2.0 应用无法访问 Google Cloud SQL 数据库

无法在 Spring Data Cloud Spanner 中将 java.sql.Timestamp 转换为 com.google.cloud.Timestamp

无法启动 Google Cloud phpMyAdmin 页面?

如何终止 Google Cloud SQL for PostgreSQL 中的会话?

在 GKE 中,typeorm 无法连接到 Google Cloud SQL 代理

Google Cloud SQL 维护时段