CentOS7之Docker构建MySql8.0.20(解决1251-client does not support authentication protocol requested by ser)
2021/9/14 2:04:52
本文主要是介绍CentOS7之Docker构建MySql8.0.20(解决1251-client does not support authentication protocol requested by ser),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 一、构建mysql容器服务
- 1、拉取镜像
- 2、随便创建一个容器(目的只是为了拷贝挂载目录)
- 3、启动成功后,进入容器内部拷贝配置文件,到宿主主机
- 4、删除mysql容器,重新创建容器
- 5、 重新创建mysql容器 ,挂载配置文件,数据持久化到宿主主机
- 6、进入容器登录MySql服务
- 7、远程Navicat连接测试
- 8、开启远程登录
- 9、修改用户密码
- 二、修改配置文件,测试目录挂载
- 1、修改宿主机上的配置
- 2、重启容器
一、构建mysql容器服务
1、拉取镜像
docker pull mysql:8.0.20
2、随便创建一个容器(目的只是为了拷贝挂载目录)
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.20
查看是否启动成功:
docker ps -a
3、启动成功后,进入容器内部拷贝配置文件,到宿主主机
docker cp mysql:/etc/mysql /usr/software/docker_dir/mysql8.0.20_1
拷贝容器的 /etc/mysql 目录到宿主机目录 /usr/software/docker_dir/mysql8.0.20_1 。
4、删除mysql容器,重新创建容器
需要先停止容器,再删除容器
docker stop mysql docker rm mysql
5、 重新创建mysql容器 ,挂载配置文件,数据持久化到宿主主机
docker run \ -p 3306:3306 \ --name mysql_1 \ --privileged=true \ --restart=always \ -v /usr/software/docker_dir/mysql8.0.20_1/mysql:/etc/mysql \ -v /usr/software/docker_dir/mysql8.0.20_1/logs:/logs \ -v /usr/software/docker_dir/mysql8.0.20_1/data:/var/lib/mysql \ -v /etc/localtime:/etc/localtime \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:8.0.20
命令解释:
- -p 端口映射
- –privileged=true 挂载文件权限设置
- –restart unless-stopped 设置 开机后自动重启容器
- -v /usr/software/docker_dir/mysql8.0.20_1/mysql:/etc/mysql 挂载配置文件
- -v/usr/software/docker_dir/mysql8.0.20_1/logs:/logs 挂载日志
- -v /usr/software/docker_dir/mysql8.0.20_1/data:/var/lib/mysql 挂载数据文件 持久化到主机
- -v /etc/localtime:/etc/localtime 容器时间与宿主机同步
- -e MYSQL_ROOT_PASSWORD=123456 设置密码
- -d mysql:8.0.20 后台启动mysql
挂载分为文件挂载和目录挂载:
1、 文件挂载时,宿主机需要自己提前创建好文件,不然会出问题。自己不创建文件的话 执行完命令后会将它创建成目录
2、挂载目录时可以不自己创建目录,会根据目录的挂载路径将 容器内的目录下的文件夹拷贝过来
3、挂载成功后, 如果修改挂载文件的内容,容器内的文件不会实时更新,需要重启容器。如果修改的是挂载目录下的文件,则会实时更新,所以推荐挂载目录
查看容器是否启动成功:
docker ps
6、进入容器登录MySql服务
登录守护式容器方式:
docker exec -it mysql_1 bash
mysql -uroot -p
输入密码123456后成功登入mysql服务!
支持,mysql服务构建完成。
注意,此时数据库的配置、数据、日志等信息都挂载在宿主机上,我们可以查看一下:
7、远程Navicat连接测试
发现远程连接的时候出错了!因为默认情况下只允许本地连接。
8、开启远程登录
容器内连接到mysql客户端后,首先查看用户和可连接主机信息:
注意,当我用“select user,host from user;”查询的时候发现:
可以看到,root用户对应的host其实是localhost和%。这代表远程应该可以使用root用户连接到本服务才对!
所以下面的sql我们可以先不用执行。
use mysql; update user set host='%' where user='root'; flush privileges;
我们来尝试修改root用户密码。
9、修改用户密码
我们再来执行下面的sql:
select host,user,plugin,authentication_string from mysql.user;
备注:
- host为 % 表示不限制ip
- localhost表示本机使用
- plugin非mysql_native_password 则需要修改密码
这里挺奇怪的,root用户对应%的那一条消息的host和user好像乱码了。但是通过对比,我们应该还是可以确定这第一条列出的应当就是root ~ % 。所以,我们还是不需要修改远程登录的。
根据备注第三条plugin非mysql_native_password 则需要修改密码,我们尝试修改root用户密码(相当于还是改成原来的密码):
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
修改成功后我们再来查询:
发现上一次乱码的信息竟然变得正常了。而且此时root % 对应的plugin已经变成了mysql_native_password。
我们再次尝试使用Navicat连接:
可以看到,此时就可以正常连接成功了!!!
二、修改配置文件,测试目录挂载
修改my.cnf配置文件,打开binlog日志,以及指定severId。
[mysqld] server-id=47 #开启binlog log_bin=master-bin log_bin-index=master-bin.index skip-name-resolve # 设置连接端口 port=3306 # 设置mysql的安装目录 # basedir=/usr/local/mysql # 设置mysql数据库的数据的存放目录 # datadir=/usr/local/mysql/mysql-files # 允许最大连接数 max_connections=200 # 允许连接失败的次数。 max_connect_errors=10 # 服务端使用的字符集默认为UTF8 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证 #mysql_native_password default_authentication_plugin=mysql_native_password
1、修改宿主机上的配置
我们首先进入到宿主机**/usr/software/docker_dir/mysql8.0.20_1/mysql** 目录下:
我们来修改my.cnf文件,再原来的配置文件后追加上面的内容:
vim my.cnf
2、重启容器
docker restart mysql_1
然后,我们需要给root用户分配一个replication slave的权限。
#登录主数据库 mysql -u root -p GRANT REPLICATION SLAVE ON *.* TO 'root'@'%'; flush privileges; #查看主节点同步状态: show master status;
这篇关于CentOS7之Docker构建MySql8.0.20(解决1251-client does not support authentication protocol requested by ser)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25如何部署MySQL集群资料:新手入门教程
- 2024-12-24MySQL集群部署资料:新手入门教程
- 2024-12-24MySQL集群资料详解:新手入门教程
- 2024-12-24MySQL集群部署入门教程
- 2024-12-24部署MySQL集群学习:新手入门教程
- 2024-12-24部署MySQL集群入门:一步一步搭建指南
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解
- 2024-12-07MySQL分库分表入门指南