一、场景需求
在开发环境中,一般使用 windows 系统进行开发,但需要在 linux 系统中创建运行 mysql8.0 的 docker 容器中进行测试(win10特定版本或win11才能安装 docker),为了方便还需要在 windows 系统中通过 SQLyog 工具查询 docker 容器中的数据库。
实际场景中未必遇到这种情况,这里仅记录自己实现的过程,以及踩过的坑!
二、实现思路
1、由于 linux 系统能更好的支持 docker 容器,所以windows 安装 virtualBox 虚拟机,virtualBox 安装 linux(centos7版)系统,然后在 centos7 中创建 mysql 容器。
2、在window 上运行 SQLyog 客户端,查询 docker 容器中的数据库
三、相关步骤及配置
1、安装 VirtualBox 及centos7 系统(略去具体安装方法)
centos7镜像可到阿里云镜像站获取:centos-7-isos-x86_64安装包下载_开源镜像站-阿里云
注意:
①最好使用DVD及Everything版本,否则可能会导致安装虚拟机增强功能失败。我最开始使用MInimal版本,增强功能始终安装不上,折腾了我一下午+一晚上。
②Centos7 安装完成后,将网络的连接方式改为【桥接网卡】,以便宿主机和虚拟机能相互ping通
2、Centos7 中安装 docker(略去具体安装方法)
可参考:Install Docker Engine on CentOS | Docker Docs
注意:官网给出的镜像路径是国外网址,拉取镜像经常超时,所以添加镜像仓库时,最好使用阿里云的镜像仓库路径
//docker 官网的镜像仓库路径
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo//国内用户需要添加阿里云的镜像仓库路径
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、Centos7 中安装运行 Mysql8 的 docker 容器
以数据卷的形式创建及启动,以便保存 docker 容器中的数据。
docker run --name m1 -e MYSQL_ROOT_PASSWORD=1 -v /root/mysqlData:/var/lib/mysql --privileged=true -d -p 3306:3306 mysql//--name test 为容器指定一个名称(可替换test为自己喜欢的名称)。
//-e MYSQL_ROOT_PASSWORD=1 设置MySQL的root密码。你应该替换1为你的实际密码。
//-d 使容器在后台运行。
//mysql:latest 是要运行的MySQL镜像和标签(在这里是最新版本)
//以数据卷的形式,创建并启动mysql容器,容器内的mysql数据不会因为容器的删除而被删除
//-v /root/mysqlData:/var/lib/mysql:将数据卷/root/mysqlData映射到容器的/var/lib/mysql目录
//-p 3306:3306:将容器的3306端口映射到主机的3306端口
//--privileged=true: 使容器内的root拥有真正的root权限,解决挂载目录没有权限的问题
4、在 docker 容器中新增数据test及表user
5、在 Windows 系统中运行 SQLyog 客户端,连接 docker 容器中的数据库
注意:如果遇到以下错误,则是 SQLyog 版本和docker容器中的mysql版本不匹配的原因。
报错原因:客户端不支持服务器要求的认证协议。这可能是因为客户端版本太旧,不支持服务器所使用的新认证协议。
解决方法:升级客户端版本或创建用户时指定使用旧的认证协议
alter USER 'username'@'hostname' IDENTIFIED WITH mysql_native_password BY 'password';-- 将 username 改为 root
-- 将 hostname 改为 % 和 localhost
-- 将 password 改为数据库密码-- 具体sql语句如下:
alter USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1';
alter USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1';-- 刷新权限
FLUSH PRIVILEGES;