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
相关产品推荐
相关产品推荐

