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

GitLab CI+Docker+Laravel数据库迁移失败:认证方法未知

解决GitLab CI中MySQL 8.0数据库迁移认证失败问题

问题分析

你遇到的SQLSTATE[HY000] [2054]错误,核心原因是MySQL 8.0默认启用了caching_sha2_password认证插件,但你的应用使用的数据库客户端(比如旧版本的PHP mysqlnd扩展)不支持这种新的认证方式,导致连接握手失败。

快速解决方案(GitLab CI配置调整)

直接修改GitLab CI的MySQL服务配置,强制它使用兼容旧客户端的mysql_native_password认证方式:

before_script:
  - bash .gitlab-ci.sh
  - export APP_ENV=testing
services:
  # 修改services配置,添加启动命令指定认证插件
  - name: mysql:8.0
    command: ["--default-authentication-plugin=mysql_native_password"]
variables:
  MYSQL_DATABASE: test_db
  MYSQL_ROOT_PASSWORD: testdb
  DB_HOST: mysql
  DB_USERNAME: root
  DOCKER_DRIVER: overlay2 # 补全你之前截断的配置

额外验证步骤(可选)

如果调整后还是有问题,可以在CI的job里添加一个测试命令,确认MySQL的认证插件配置是否生效:

# 在before_script里新增这条命令,查看用户认证插件
mysql -h $DB_HOST -u $DB_USERNAME -p$MYSQL_ROOT_PASSWORD -e "SELECT user, plugin FROM mysql.user;"

执行后如果看到root用户的plugin是mysql_native_password,说明配置生效了。

其他可能的排查点

  • 检查你的.gitlab-ci.sh脚本是否安装了正确的数据库客户端依赖,比如PHP项目要确保mysqlnd扩展是最新版本(部分旧版本确实不支持caching_sha2_password)。
  • 确认你的应用配置文件里的数据库连接参数和CI变量完全一致,比如DB_PASSWORD是否正确关联到$MYSQL_ROOT_PASSWORD。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:50:08