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

使用Docker Compose启动MySQL 8.4容器遇unknown variable错误求助

解决MySQL 8.4容器启动报错:unknown variable 'default-authentication-plugin=mysql_native_password'

错误原因

MySQL 8.0.34及后续版本(含8.4)已移除default-authentication-plugin(横杠分隔)配置项,替换为default_authentication_plugin(下划线分隔)。同时你的配置存在重复设置、拼写错误,导致容器启动失败。

修正步骤

1. 调整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_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

说明:移除了无效的MYSQL_AUTHENTICATION_PLUGIN环境变量,修复了healthcheck中$$MYSQl_USER的拼写错误(小写l改为大写L)。

2. 修改my.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'

3. 清理旧数据卷(可选)

如果之前用过旧版本MySQL的数据卷,可能存在兼容性残留,执行以下命令重置:

docker-compose down -v
docker-compose up -d

验证

容器启动后,进入容器确认默认认证插件:

docker exec -it <容器名> mysql -u root -p
# 输入随机生成的root密码后执行
SELECT @@default_authentication_plugin;

返回结果应为mysql_native_password。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:43:18