使用Docker搭建MySQL服务过程,以及碰到的问题
今天预计是要学习搭建cloudera manager的过程,因为在过程中会使用到MySQL作为数据存储,但是又不想再去安装一份MySQL,所以选择了使用Docker拉取。
下载步骤
选择Docker的原因就是因为有很多镜像是已经做好配置,只要拉取下来就可以使用了,所以下载步骤很简单。
- 使用Docker拉取一份MySQL的镜像
- 生成一份MySQL的实例
- 运行MySQL实例,并进行配置
至于Docker是怎么安装的这里就不再赘述,教程太多,就放一个我用的比较舒服的吧。http://www.runoob.com/docker/docker-tutorial.html
步骤详解
第一步,使用Docker拉取一份MySQL的镜像
docker pull mysql
执行这句话之后,会进入一段时间的等待,Docker会自动拉取一份MySQL的镜像
(PS:在拉取过程中,可能会有小伙伴发生连接超时的情况。这个问题只能归功于咱们现在的这个网络环境实在是感人。)
解决方案如下:
将拉取地址改为阿里的镜像仓库即可,具体操作如下:
cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
sed -i “s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon --registry-mirror=https://1234abcd.mirror.aliyuncs.com|g” /etc/systemd/system/docker.service
systemctl daemon-reload
service docker restart
Docker重启后镜像仓库就会变成阿里的,这样再执行上面的pull语句,执行起来就很快了。
第二步,生成一份MySQL的容器
docker run -p 3306:3306 -v $PWD/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql -d mysql
这里简单的解释一下:
- -p 3306:3306 将镜像的指定端口映射到主机的端口,第一个为本地端口,第二个为实例端口。
- -v $PWD/mysql:/var/lib/mysql 将主机当前目录下的mysql目录挂载到容器的 /var/lib/mysql 。
- -e MYSQL_ROOT_PASSWORD=123456 将root用户的密码初始化成123456
- –name mysql 容器的名字
- -d mysql 使用哪个镜像
生成成功之后,会返回给一个ID
第三步,运行MySQL实例,并进行配置
其实在经过上面那个步骤之后,一个名为MySQL的容器就已经在运行中。
docker ps
使用上面这句话可以查询正常运行中的容器
如果查询不到之前生成的容器,可以使用下面这句运行容器
docker start mysql
(这里的mysql是之前我给我生成的容器定义的名字,各位小伙伴自行发挥)
到此,一个活生生的MySQL容器就是已经生成完毕了,但是这个MySQL暂时还不能用!因为完全还没有配置,能用才见鬼。
docker exec -it mysql bash
使用上面这句话,进入运行中的容器当中之后进行配置
当成功进入容器时,Shell的头部会发生变化,
↓
进入容器之后,开始对root账户进行配置,默认是没有密码的,第一次输入的密码就是之后的root账户的密码
然后Shell的头部又会发生变化。
↓
此时的MySQL已经可以在Shell界面使用,但是还是不可以进行远程连接,所以进行用户登录的设置。
use mysql;
select host,user from user;
通过update语句将结果修改为以下信息↓
最后执行下面语句进行强制信息刷新
flush privileges;
之后理论上就可以远程连接了
其他:碰到的问题
当我完成上面的这些配置之后,满心欢喜的去找本地Navicat 12连接刚刚出炉的MySQL,就碰到了下面这个问题:
ERROR 2059 (HY000): Authentication plugin ‘caching_sha2_password’ cannot be loaded: ÕÒ²»µ½Ö¸¶¨µÄÄ£¿é¡£
然后就只好继续求助百度
得到以下可用解决方法:
use mysql;
ALTER USER ‘root’@’%’ IDENTIFIED BY ‘123456’ PASSWORD EXPIRE NEVER; #修改加密规则
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’; #更新用户的密码,使用新加密规则
FLUSH PRIVILEGES;
之后再重试使用Navicat连接MySQL
成功!
到此在Docker下的MySQL配置就已经完成。