使用docker-compose连接mysql以及8.0版本遇到的身份验证问题解决方案

docker-compose

使用Docker部署环境非常方便,Compose项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
它允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目。

部署mysql容器

根据我的习惯,我将容器放在/usr/local/docker目录下:

$ mkdir mysql
$ cd mysql
$ vim docker-compose.yaml

文件内容如下:

version: '3.1'
services:
    mysql:
        hostname: "localhost"
        network_mode: "bridge"
        command: 
            --default-authentication-plugin=caching_sha2_password
        environment:
            MYSQL_ROOT_PASSWORD: "123456"
            MYSQL_USER: 'root'
            MYSQL_PASS: '123456'
        image: "mysql"
        container_name: "mysql_1"
        restart: always
        volumes:
            - "./db:/var/lib/mysql"
            - "./conf/my.cnf:/etc/my.cnf"
            - "./init:/docker-entrypoint-initdb.d/"
        ports:
            - "3306:3306"

编写完成后,在当前目录下运行命令:

$ docker-compose up -d

可能遇到的问题

由于mysql8.0版本性能提升明显,这里拉取的镜像直接使用latest版本,因此默认是mysql8.0
https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html
在这里插入图片描述
如果不加--default-authentication-plugin=caching_sha2_password,在使用诸如pycharm直接连接数据库或pymysql都会遇到报错:

RuntimeError: cryptography is required for sha256_password or caching_sha2_p

这是因为MySQL8.0版本以后采用caching_sha2_password作为默认的身份验证插件

解决方案

  • 还未创建容器,那么在docker-compose文件里提前设定好default-authentication-plugin
  • 如果已经创建好了,也可以进入数据库,查询数据库中user表plugin列的值
    SELECT host, user, plugin, authentication_string FROM mysql.user;
    
    然后输入以下命令
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
    FLUSH PRIVILEGES;
    
    这样就更改身份验证插件为mysql_native_password,再重启服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值