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

如何为GitHub Workflow配置MySQL服务器并解决连接报错?

修复GitHub Actions中MySQL连接丢失的问题

针对你遇到的ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 2错误,给你几个具体的修复方案:

1. 等待MySQL容器完全启动

Docker启动MySQL容器后,服务不会立刻就绪,直接执行连接命令会因为服务未启动完成导致连接失败。你可以在连接步骤前加一个等待逻辑:

- name: Wait for MySQL to be ready
  run: |
    until mysqladmin ping -h localhost -P 33306 -uroot -ppassword --silent; do
      echo "Waiting for MySQL..."
      sleep 2
    done

如果环境没有mysqladmin,也可以用nc命令检查端口:

- name: Wait for MySQL port to be open
  run: |
    until nc -z localhost 33306; do
      echo "Waiting for MySQL port..."
      sleep 2
    done

2. 修正SQL文件读取与连接命令

你的连接命令里用find -wholename ./sql/init.sql可能存在路径不确定性,GitHub Actions的工作目录是仓库根目录,直接指定路径更可靠。同时,简化SQL文件的执行方式:

mysql --protocol=tcp -h localhost --port 33306 -uroot -ppassword < ./sql/init.sql

这种方式比嵌套$(cat ...)更稳定,避免了命令行转义可能带来的问题。

3. 调整MySQL容器的启动配置

MySQL 8默认root用户只允许容器内本地连接,你需要在启动容器时放开远程连接权限:

- name: Start MySQL container
  run: |
    docker run -d \
      -p 33306:3306 \
      -e MYSQL_ROOT_PASSWORD=password \
      -e MYSQL_ROOT_HOST=% \
      mysql:8

这里的MYSQL_ROOT_HOST=%允许root用户从任何地址连接,解决权限限制导致的连接失败。

另外,MySQL 8默认的caching_sha2_password认证插件可能和部分客户端不兼容,如果后续遇到认证错误,可以启动容器时指定旧插件:

- name: Start MySQL container with legacy auth
  run: |
    docker run -d \
      -p 33306:3306 \
      -e MYSQL_ROOT_PASSWORD=password \
      -e MYSQL_ROOT_HOST=% \
      mysql:8 --default-authentication-plugin=mysql_native_password

4. 确认端口映射与网络访问

确保Docker容器的端口映射正确,若仍有问题,尝试用127.0.0.1代替localhost连接:

mysql --protocol=tcp -h 127.0.0.1 --port 33306 -uroot -ppassword < ./sql/init.sql

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:02:48