先说一下环境,Centos7中安装了Docker,Docker版本20.10.9,在Docker中部署MySQL8.0.26

Centos关闭防火墙,或放行相关端口

关闭防火墙systemctl stop firewalld
禁止开机启动防火墙systemctl disable firewalld

重点是navicat在远程连接mysql的时候,会报2003和1251的错。

第一步:从Docker Hub拉取官方mysql镜像

访问DockerHub 官网,搜索mysql

 点第一个搜索到的mysql

 为了防止mysql版本有变动,我们不下载latest,而下载一个固定的版本,现在最新版本是8.0.26,我们就使用这个,复制命令 ,到centos中去执行。

docker pull mysql:8.0.26

稍等一会就会下载完成

第二步:创建一个新的mysql容器并运行

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.26

 这时候mysql已经跑起来了

我们使用navicat去测试连接

 navicat会报1251的错,出现这个问题的原因是MySQL8.0版本的加密方式和MySQL5.0的不一样,所以使用Navicat连接MySQL会报错。

解决办法:

我们进入容器内部,

docker exec -it mysql bash

打开mysql数据库,输入密码 root (在输密码root的时候不显示)

mysql -uroot -p

更改加密方式,输入命令

ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;

注意这个%,%表示让所有的ip都可以访问,mysql默认是只有localhost才能访问,我们这里顺手修改了让所有ip都能够访问,如果不修改,当navicat远程连接mysql的时候,会报2003的错误。当然,如果navicat和mysql在一台电脑上,你也可以把%替换为localhost:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;

更改密码,输入命令

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

最后一步,刷新,注意有分号;

FLUSH PRIVILEGES;

这时候我们去navicat测试连接,就可以连接上了。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐