未知变量'default-authentication-plugin=mysql_native_password'

问题描述 投票:0回答:1

我尝试使用 docker compose 启动 mysql 容器,但收到错误 未知变量 'default-authentication-plugin=mysql_native_password'。

我的 docker-compose.yml 中有这个

    db:
        image: mysql:8.4
        command: ["mysqld", "--default-authentication-plugin=mysql_native_password"]
        restart: unless-stopped
        ports:
            - 3306:3306
        environment:
            MYSQL_RANDOM_ROOT_PASSWORD: yes
            MYSQL_AUTHENTICATION_PLUGIN: mysql_native_password
            MYSQL_DATABASE: ${MYSQL_DATABASE:-learn}
            MYSQL_USER: ${MYSQL_USER:-learn}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD:-test2024}
        volumes:
            - mysql_dev:/var/lib/mysql
            - ./docker/laravel/config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
        healthcheck:
            test: [ "CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', '$$MYSQl_USER', '-p$$MYSQL_PASSWORD' ]
            timeout: 20s
            retries: 2

在我的.cnf 文件中我有这个:

[mysqld]
mysql_native_password=ON
default-authentication-plugin=mysql_native_password
general_log = 0
general_log_file = /var/lib/mysql/general.log
default_time_zone='+00:00'

我到处搜索,但没有找到解决我问题的方法。如果有人有解决方案请。

提前致谢

我尝试过更改mysql的镜像版本,但没有成功。如果我将版本降级到 5.7 并更改卷名称,则可以正常工作。但我想升级mysql版本。

docker docker-compose
1个回答
0
投票

mysql 8.4 中没有 default-authentication-plugin 参数,您可以通过 --mysql-native-password 获取所有 mysqld 参数和描述,如下所示

mysqld --verbose --help
...
  --mysql-native-password[=name] 
                      Enable or disable mysql_native_password plugin. Possible
                      values are ON, OFF, FORCE (don't start if the plugin
                      fails to load).
...

因此,对于您的 docker-compose.yml,请将行从

更改为
        command: ["mysqld", "--default-authentication-plugin=mysql_native_password"]

        command: ["mysqld", "--mysql-native-password=ON"]

并在 my.cnf 中注释掉 default-authentication-plugin

[mysqld]
mysql_native_password=ON
#default-authentication-plugin=mysql_native_password
general_log = 0
general_log_file = /var/lib/mysql/general.log
default_time_zone='+00:00'

然后再次尝试重新启动容器,它应该可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.