解决:Docker下运行Mysql出现:无法登陆问题以及无法加载身份验证的问题

前言

用于帮助大家解决问题,拒绝转载

问题

无法加载身份验证插件“caching_sha2_password”
Authentication plugin 'caching_sha2_password' cannot be loaded

原因

  • 这个问题一般是出现在mysql 8.0上,并且是将5.7及以下版本的mysql的数据、日志或配置文件等交由了8.0来使用
  • 这是由Mysql用户加密规则引起的,Mysql新版本的用户加密规则发生了变化,Mysql在5.7及之前的版本的关于password的加密方法都是使用的mysql_native_password,不过到MySQL8.0的时候换成了caching_sha2_password

在Mysql的配置文件中有这么项配置:

  • default-authentication-plugin,这个参数后面跟的是用户加密规则
  • 在你安装了mysql服务的系统上找到mysql的配置文件,windows上叫my.inilinux&unix上叫my.cnf;至于安装路径取决于你安装的版本和路径,可以直接搜索文件名来找到它。

3种解决方法:

  1. 登录mysql,使用语句修改
  • 如果是宿主机装的mysql那就直接连:
    # windows下WIN+R打开黑窗口	linux&unix直接输入
    mysql -u mysql用户名 -p 密码
    # Linux&unix&docker下 登录mysql
    mysql -u mysql用户名 -p 密码
    # 查看用户加密规则
    select host,user,plugin,authentication_string from mysql.user
    
  • 查询结果如下
    image-20201125111017150
  • 修改密码并启用新的加密规则
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    
  1. 修改配置文件
  • Docker下找配置文件
    # 查询mysql的容器id
    docker ps -a
    
  • 进入容器(未映射配置文件的情况下,映射了的话直接修改宿主机映射过来的my.cnf,修改完重启mysql容器即可)
    docker exec -it 容器id bash
    
  • 一般存放路径都在/etc/mysql/my.cnf不过版本不同存放路径可能不一样,根据你版本的目录找一下
  • 打开配置文件,在尾行修改或增加内容如下
    default-authentication-plugin=mysql_native_password
    
  1. docker-compose.ymlcommand中指定好用户连接规则并且忽略docker的安全验证,此时当容器就会带着这个参数启动(.yml已简化,看重点就行)
    version: '3.7'
    services:
      mysql:
        restart: always
        image: mysql
        container_name: mysql
        ports:
          - 3306:3306
        command:
           # 设置协议认证方式(加密方式)
          --default-authentication-plugin=mysql_native_password
    
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页