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
- 换用非默认端口(比如3307)在action的
完整工作流示例(参考)
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
相关产品推荐
相关产品推荐

