You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Workflow配置Laravel CI时MySQL报1045访问被拒错误如何解决

修复方案

问题根因

  • 同时运行了两个独立的MySQL实例:你在services中配置的MySQL容器实例,和你手动启动的Ubuntu宿主系统自带的MySQL实例,两者的用户、端口、数据完全隔离,你手动执行的数据库操作为宿主实例生效,而Laravel尝试连接的是容器实例,操作完全错位。
  • DB_PORT配置错误:你填写的33306:3306/tcp是Docker端口映射规则,不是实际访问端口,Laravel数据库配置只需填写宿主机侧的映射端口33306。
  • .env.testing缺少数据库密码配置:报错提示using password: NO,说明程序未读取到数据库密码参数。
  • 手动创建用户的步骤无效:mysql -u runner默认没有操作宿主MySQL的权限,即使操作成功,也和Laravel需要连接的容器MySQL无关。
  • 你配置中出现的homestead用户是你自行定义的:在services的MySQL环境变量中你指定了MYSQL_USER: 'homestead',MySQL官方容器启动时会自动创建该用户,不需要你手动创建。

修复步骤

  1. 删除冗余的MySQL操作步骤,从配置中移除以下四个步骤:
- name: Start mysql service
  run: sudo /etc/init.d/mysql start
- name: Setup database user
  run: mysql -u runner -e 'CREATE USER 'worker'@'localhost' IDENTIFIED BY 'secret';'
- name: Flush privileges
  run: mysql -u worker --password=secret -e 'FLUSH PRIVILEGES;'
- name: Create testing database
  run: mysql -u worker --password=secret -e 'CREATE DATABASE IF NOT EXISTS content_information_test;'

你配置的MySQL容器启动时会自动完成数据库创建、homestead用户创建及权限授予操作,无需额外执行。

  1. 修正.env.testing的数据库配置,确保包含以下参数:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=33306
DB_DATABASE=content_information_test
DB_USERNAME=homestead
DB_PASSWORD=secret
  1. 修正migrate和phpunit步骤中的DB_PORT环境变量:
    将两处的DB_PORT: 33306:3306/tcp修改为DB_PORT: 33306,修改后对应步骤配置如下:
- name: Migrate Test Database
  run: php artisan migrate --env=testing --seed --force
  env:
    DB_PORT: 33306
    REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
- name: Execute tests (Unit and Feature tests) via PHPUnit
  run: vendor/bin/phpunit
  env:
    DB_PORT: 33306
    REDIS_PORT: ${{ job.services.redis.ports['6379'] }}

修改完成后重新运行流水线即可正常执行迁移。

内容的提问来源于stack exchange,提问作者Mathmeeeeen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:39:02