Github Actions:使用MySQL服务时出现用户'root'@'localhost'的访问被拒绝。

11

错误,用户 'root'@'localhost' 的访问被拒绝(使用密码:是)。 我正在尝试在 Github Actions 中使用 mysql 服务,但一直失败。我收到以下错误信息:

拒绝用户 'root'@'localhost' 的访问(使用密码:是)

我的任务如下:

test:
  name: Test
  needs: install
  services:
    mysql:
      image: mysql:8.0
      ports:
        - '8888:3306'
      env:
        MYSQL_ROOT_PASSWORD: rootpass
        MYSQL_DATABASE: test
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@master
    - uses: actions/setup-node@master
      with:
        node-version: '10.x'
    - run: mysql --port 8888 -u root -prootpass -e 'CREATE DATABASE IF NOT EXISTS test;'

我似乎无法使它工作。任何帮助都将不胜感激。有关测试设置的存储库的拉取请求可以在此处找到:https://github.com/morsby/medmcq/pull/399


你确定在运行该步骤之前MySQL实例已经准备好接受登录吗? - bradj
嗨,我遇到了类似的问题,你说的“ready to accept logins”是什么意思? - zedian
1个回答

14

我花了一些时间尝试不同的方法来使它工作。我找到了一个解决方案,但说实话,我不确定它为什么有效。我只是在mysql命令中添加了-h 127.0.0.1

我还将健康检查标志添加到options中,以确保服务能够接受请求。

这是一个可行的工作流程:

name: CI
on: push
jobs:
  build:
    runs-on: ubuntu-latest
    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: test
        ports:
            - '8888:3306'
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
    steps:
      - uses: actions/checkout@v1
      - run: mysql -h 127.0.0.1 --port 8888 -u root -ppassword -e 'CREATE DATABASE IF NOT EXISTS test;'

你真是个救星!我在论坛上看到过这些选项,但一直不明白为什么要包含它们,直到现在才听懂了。你的解释非常好。谢谢!现在一切都正常工作了。这可能是因为健康检查确保等待下一步,而mysql服务正在启动。 - Thjen
即使使用了健康检查,如果删除“-h 127.0.0.1”,它仍会抛出访问被拒绝的错误。我认为这个标志是使其正常工作的关键。 - peterevans
2
这是因为MySQL中的一个奇怪历史习惯,它将localhost(默认值)解释为本地UNIX套接字连接,而127.0.0.1则是TCP/IP连接。 - Roger Dahl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接