Laravel 10 CI/CD测试遇SQLSTATE[HY000] [2002]错误,求助解决
解决GitHub Actions中Laravel测试MySQL连接失败问题
针对你遇到的SQLSTATE[HY000] [2002] No such file or directory错误,以下是具体修复方案:
1. 调整数据库连接HOST配置
在.env.ci文件中,将DB_HOST=localhost改为DB_HOST=127.0.0.1。
原因:Ubuntu环境下,PHP的MySQL驱动会优先将localhost解析为Unix socket连接,但mirromutth/mysql-action启动的MySQL默认使用TCP端口3306,且socket路径可能与PHP默认配置不匹配。改用127.0.0.1会强制PHP通过TCP协议连接MySQL,规避socket路径不兼容问题。
修改后的.env.ci相关配置:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=db-testing DB_USERNAME=root DB_PASSWORD=test
2. 添加MySQL服务就绪等待步骤
在Workflow中,启动MySQL后新增步骤,确保服务完全启动并可连接后再执行后续操作:
修改后的Workflow配置:
name: Run tests on: push: branches: - master - develop jobs: tests: name: Run tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, pdo_mysql, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv coverage: none - uses: mirromutth/mysql-action@v1.1 with: mysql database: db-testing mysql user: root mysql password: test # 等待MySQL服务就绪 - name: Wait for MySQL availability run: | until mysql -h 127.0.0.1 -u root -ptest -e "SELECT 1"; do sleep 2 done - name: Run composer install run: composer install -n --prefer-dist - name: Prepare Laravel Application run: | cp .env.example .env cp .env.ci .env.testing php artisan optimize:clear php artisan key:generate - name: Run tests run: php artisan test
3. 额外检查项
- 确认
setup-php步骤中已启用pdo_mysql扩展(上述配置已添加),这是PHP连接MySQL的必要扩展。 - 若仍有问题,可尝试升级
mirromutth/mysql-action到最新版本(如v1.2),确保与GitHub Actions环境兼容。
内容的提问来源于stack exchange,提问作者Badr
相关产品推荐
相关产品推荐

