前提,已经弄好基本的docker服务了。
一、基本流程
1、目录准备
我自己的资料喜欢放在 /data 目录下,所以老规矩:
先进入 /data 目录:
cd /data
创建 mysql 目录并进入:
mkdir mysql
cd mysql
2、镜像查找
docker search hub.rat.dev/mysql:8.0.27
3、镜像拉取
docker pull hub.rat.dev/mysql:8.0.27
4、创建容器
docker run -id \
-p 3306:3306 \
--name=mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
hub.rat.dev/mysql:8.0.27
5、查看容器
docker ps
二、各类问题合集
1、【解决】mysql镜像拉取出现网络错误
镜像加速器参照(下面的连接会不断更新国内能够使用的Docker镜像源,可以自己看看,自己的服务器可以用哪一个或者哪几个):
国内能用的Docker镜像源【2025最新持续更新】_docker 镜像-CSDN博客
有哪些可以用的镜像加速器、具体怎么使用,参照上文即可。
2、【解决】caching sha2 password
(1)背景
docker容器使用的mysql镜像是9版本。
我电脑安装的navicat是16,同事应该是12及以下的版本。
我的电脑用navicat连接远程服务器的mysql,没有问题。但同事的不可以,会报错。
显示:Authentication plugin 'caching sha2 password' cannot be loaded
(2)原因
在使用 MySQL 8 及以上版本时,默认的加密方式是 caching_sha2_password,而在 MySQL 8 之前的版本中,默认的加密方式是 mysql_native_password。因此,当使用一些旧版本的客户端(如 Navicat Premium 12)连接 MySQL 数据库时,可能会出现 Authentication plugin 'caching_sha2_password' cannot be loaded 的错误。
(3)解决思路
更换一下加密方式,参照网络文档(直接走这个文档,mysql镜像版本太高的话,会报错):
navicat连接MySQL8.0提示caching_sha2_password问题解决方法-CSDN博客
报错信息:
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded
(4)【解决】mysql_native_password is not loaded
检查了一下,发现是mysql镜像太高了,到9了。
查看mysql镜像版本:打开与数据库的连接,不需要引用表,直接输入查询语句。
SELECT VERSION();
具体操作见 3。
3、更换mysql镜像
那么,现在需要把mysql镜像的版本降下来。
(1)备份数据!!!
(2)备份数据!!!
(3)备份数据!!!
把所有数据库表的转储成sql下来,转储的时候千万把数据一起转储出来,别只转储了表结构。
记录所有数据库表的名称、字符集、排序规则。等一下要还原回去的。
(4)停止mysql容器
docker stop mysql
(5)mysql数据文件夹
cd /data
mv mysql mysql.bak
将mysql对应的数据文件夹进行重命名,后期如果创建失败,能够把文件夹重新还原回去。
(6)创建mysql容器
参照一、基本流程进行
(7)进入mysql容器内部
docker exec -it mysql /bin/bash
需要注意:如果刚刚stop的容器叫mysql,又没有删除。那么这次创建的容器就不能够叫mysql,可以改成 mysql_3306 或者其他。
(8)打开mysql
mysql -uroot -p
回车后输入密码即可。
或者-p后面直接带上密码,然后回车。
(9)跟着文档走一次
navicat连接MySQL8.0提示caching_sha2_password问题解决方法-CSDN博客
(10)用navicat连接mysql
应该就可以了。
(11)数据还原
依次:建数据库 - 按照名称、字符集、排序进行回填 - 运行转储的sql文件
(12)碎碎念
本来不想这么麻烦的,有别的方式可以解决报错:
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded
参考文档(写得非常清晰,鼓掌):
ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded-CSDN博客
但是我弄的这个镜像,什么命令都没有:vim、yum、apk、apt-get、dnf、apt、wegt.......
倒是rpm、curl、mv可以用,通过curl下载下来的rpm包,rpm -ivh又一直报错。
查了一下 /etc/os-release,是Oracle Linux Server。
我直接访问:
Oracle Linux 7 (x86_64) Latest | Oracle, Software. Hardware. Complete.
一看,n个包,尝试手动下载,初略下载了几个,然后通过docker创建容器映射的目录方式,迁移到容器内部。然后开始摆烂。
你依赖我,我依赖它的,啊啊啊啊。不下载了。
想了想,也不是非要去改my.cnf。但是同事又连不上mysql,如果不通过升级navicat的版本的方式,就只能去降mysql镜像版本了。