【问题标题】:How to pass "mysql_native_password" to MySQL service in GitHub Actions?如何在 GitHub Actions 中将“mysql_native_password”传递给 MySQL 服务?
【发布时间】:2020-07-09 04:33:38
【问题描述】:

我的 GitHub Action 配置示例:

jobs:
  unit-test:
    name: Unit Testing
    runs-on: ubuntu-latest
    services:
      mysql:
        image: mysql:8.0
        env:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: db
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=5
    steps:
      - name: Verify MySQL connection from host
        run: mysql --host mysql --port 3306 -uroot -ppassword -e "SHOW DATABASES"

使用 MySQL 5.7 可以正常工作。但在 MySQL 8.0 中显示:

ERROR 1045 (28000): Plugin caching_sha2_password could not be loaded: ...

在 MySQL docker docs 中有一行允许mysql_native_password auth:

command: --default-authentication-plugin=mysql_native_password

如何在 GitHub Actions/service 中允许 mysql_native_password auth 插件?

【问题讨论】:

  • 你找到答案了吗? @mvorisek
  • @mdegis 不幸的是,没有,仍在寻找有聪明解决方案的人:)
  • 嘿,你解决了这个问题,你是怎么解决这个问题的?

标签: mysql docker github-actions


【解决方案1】:

问题在于 GH 操作不会将 --entrypoint 选项和相关参数移动到命令末尾,而是附加其他选项,例如 env。在 env service 后面的部分中指定的变量。

经过我发现的大量试验和错误,您可以指定环境。手动 vars,这样的命令可以正常工作:

...
    services:
      mysql:
        image: mysql:8
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=5 -e MYSQL_ROOT_PASSWORD=xxx -e MYSQL_USER=xxx -e MYSQL_PASSWORD=xxx -e MYSQL_DATABASE=xxx --entrypoint sh mysql:8 -c "exec docker-entrypoint.sh mysqld --default-authentication-plugin=mysql_native_password"
    steps:
...

【讨论】:

  • 由于没有人提出 GitHub 的问题,我已将其添加到 github.com/docker-library/mysql/issues/711。看起来该插件也可以与 RAW SQL 一起使用。如果我能让它工作,我将只使用标准文件夹结构中的 SQL 文件来做一个替代答案。
  • 这将导致我结束Error: Failed to initialize, mysql service is unhealthy.
  • 谢谢@mvorisek!我终于使用了@Aszen 下面提到的bitnami/mysql
【解决方案2】:

目前无法在 github 操作服务工作流语法中指定命令选项,更简单的替代方法是使用不同的 mysql 映像并覆盖入口点以使用本机密码,或者使用提供使用 env 变量配置身份验证方法的现有映像喜欢这个 bitnami mysql 图像。

使用bitnami mysql镜像:

    services:
      mysql:
        image: bitnami/mysql:8.0.20
        env:
          ALLOW_EMPTY_PASSWORD: yes
          MYSQL_DATABASE: abc
          MYSQL_AUTHENTICATION_PLUGIN: mysql_native_password
        ports:
          - 3306/tcp
        options: >-
          --health-cmd="mysqladmin ping" 
          --health-interval=10s 
          --health-timeout=5s 
          --health-retries=3

【讨论】:

    猜你喜欢
    • 2022-11-10
    • 1970-01-01
    • 2020-10-05
    • 2019-12-29
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多