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

GitHub Action工作流连接MySQL执行集成测试时遇权限错误

解决GitHub Action中MySQL集成测试的1045访问拒绝错误

核心问题分析

错误提示ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)说明连接MySQL时未提供密码,或密码与GitHub Action中MySQL服务的配置不匹配——因为Action中的MySQL是独立容器服务,本地修改用户的SQL命令在这个场景下不适用。

针对性解决方案

1. 正确配置GitHub Action的MySQL服务

在工作流的services段定义MySQL时,必须通过环境变量设置root密码,示例配置:

services:
  mysql:
    image: mysql:8.0 # 或你需要的版本
    env:
      MYSQL_ROOT_PASSWORD: your_secure_password # 建议用GitHub Secrets存储,比如${{ secrets.MYSQL_PWD }}
    ports:
      - 3306:3306
    options: >-
      --health-cmd="mysqladmin ping"
      --health-interval=10s
      --health-timeout=5s
      --health-retries=3

2. 修正测试代码的数据库连接参数

  • 主机名:不要用localhost,改用服务名mysql(GitHub Action中,服务容器的名称就是可访问的主机名)
  • 密码:必须与services中MYSQL_ROOT_PASSWORD的值完全一致
  • 用户名:保持为root

3. 等待MySQL服务就绪后再执行测试

MySQL容器启动需要时间,在执行集成测试前添加等待步骤,确保服务可用:

steps:
  # 其他步骤:拉取代码、安装依赖等
  - name: 等待MySQL服务就绪
    run: |
      until mysqladmin ping -h mysql -u root -p${{ secrets.MYSQL_PWD }} --silent; do
        echo "等待MySQL启动..."
        sleep 2
      done
  - name: 执行集成测试
    run: # 你的测试命令
  - name: Sonar扫描
    run: # 你的Sonar扫描命令

4. 不要手动执行CREATE/ALTER USER命令

MySQL容器启动时会自动初始化root用户并绑定设置的密码,手动执行用户修改命令会导致配置冲突,无需额外执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:48:35