docker 运行报错

mysql> alter user 'root'@'%' identified with mysql_native_password by '123456';
 ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded

解决方案

通过 启动容器时加载插件 或 挂载自定义配置文件 解决问题。


方法 1:启动容器时直接加载插件(已验证)

运行容器时通过 --plugin-load-add 参数显式加载插件:

docker run -d --name mysql01 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -p 3306:3306 \
  mysql:tag \
  --plugin-load-add=mysql_native_password
  • 参数说明

    • -e MYSQL_ROOT_PASSWORD=123456:设置 root 用户密码。

    • --plugin-load-add=mysql_native_password:启动时加载 mysql_native_password 插件。

    • mysql:tag:指定 MySQL 镜像版本(如 mysql:8.0)。


方法 2:挂载自定义配置文件

  1. 创建配置文件
    在宿主机创建 my.cnf 文件(路径如 /docker/mysql/conf/my.cnf),内容如下:

    [mysqld]
    plugin-load-add = mysql_native_password
    default_authentication_plugin = mysql_native_password
  • default_authentication_plugin:设置默认认证插件。
  1. 启动容器并挂载配置

    docker run -d --name mysql \
      -e MYSQL_ROOT_PASSWORD=123456 \
      -p 3306:3306 \
      -v /docker/mysql/conf/my.cnf:/etc/mysql/conf.d/custom.cnf \
      mysql:tag
  • -v /docker/mysql/conf/my.cnf:/etc/mysql/conf.d/custom.cnf:将宿主机配置文件挂载到容器的 MySQL 配置目录。

验证插件并执行修改

  1. 进入 MySQL 容器

    docker exec -it <容器名> bash
  2. 登录 MySQL

    mysql -uroot -p123456
  3. 检查插件状态

    SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'mysql_native_password';
  • 输出应显示 PLUGIN_STATUS 为 ACTIVE

  1. 修改用户认证方式

    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    FLUSH PRIVILEGES;

验证远程连接

从外部客户端测试连接:

mysql -h <Docker宿主机IP> -P 3306 -u root -p123456

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐