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

GitHub Actions中MySQL数据库访问失败及启动异常求助

问题1:mirromutth/mysql-action 密码验证失败解决
  • 确认action参数配置无遗漏,核心必填参数要准确传递:
    - name: Setup MySQL
      uses: mirromutth/mysql-action@v1.1
      with:
        host port: 3306  # 可自定义端口,比如3307
        mysql version: '8.0'
        mysql database: your_test_db
        mysql root password: ${{ secrets.MYSQL_ROOT_PWD }}
        mysql user: test_user
        mysql password: ${{ secrets.MYSQL_USER_PWD }}
    
  • 连接MySQL时必须用127.0.0.1而非localhost,容器内MySQL的socket文件和主机不共享,localhost会尝试走socket连接导致失败:
    mysql -h 127.0.0.1 -P 3306 -u root -p${{ secrets.MYSQL_ROOT_PWD }}
    
  • 检查GitHub Secrets配置:在仓库Settings->Secrets and variables->Actions里确认密码无多余空格,引用时不要加引号。
问题2:端口改为3306后systemctl启动失败解决
  • 完全不需要执行sudo systemctl start mysql.service,mirromutth/mysql-action是通过Docker容器运行MySQL的,主机上默认没有安装/启动MySQL服务,执行该命令本身就是错误操作。
  • 如果主机上之前装过MySQL,3306端口可能被占用导致容器无法启动,可二选一操作:
    • 换用非默认端口(比如3307)在action的host port参数指定;
    • 在action之前先停止主机上的MySQL服务:
      sudo systemctl stop mysql.service || true
      sudo systemctl disable mysql.service || true
      
完整工作流示例(参考)
name: Test & Deploy
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Stop host MySQL if exists
        run: |
          sudo systemctl stop mysql.service || true
          sudo systemctl disable mysql.service || true

      - name: Setup MySQL
        uses: mirromutth/mysql-action@v1.1
        with:
          host port: 3306
          mysql version: '8.0'
          mysql database: test_db
          mysql root password: ${{ secrets.MYSQL_ROOT_PWD }}
          mysql user: app_user
          mysql password: ${{ secrets.MYSQL_USER_PWD }}

      - name: Wait for MySQL ready
        run: |
          until mysqladmin ping -h 127.0.0.1 -P 3306 -u root -p${{ secrets.MYSQL_ROOT_PWD }} --silent; do
            echo "Waiting for MySQL..."
            sleep 2
          done

      - name: Execute setup script
        run: mysql -h 127.0.0.1 -P 3306 -u root -p${{ secrets.MYSQL_ROOT_PWD }} < setup_mysql_test.sql

      - name: Install Python dependencies
        run: pip install -r requirements.txt

      - name: Run tests
        run: pytest tests/
        env:
          DB_HOST: 127.0.0.1
          DB_PORT: 3306
          DB_USER: app_user
          DB_PASSWORD: ${{ secrets.MYSQL_USER_PWD }}
          DB_NAME: test_db
额外注意事项
  • MySQL 8.0默认使用caching_sha2_password认证插件,若你的Python客户端版本较老,需在setup_mysql_test.sql里修改用户认证方式:
    ALTER USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_user_password';
    FLUSH PRIVILEGES;
    
  • 确保setup_mysql_test.sql里的用户权限允许从任意主机连接:
    GRANT ALL PRIVILEGES ON test_db.* TO 'app_user'@'%';
    FLUSH PRIVILEGES;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:42:53