mysql镜像创建docker容器,及其可能遇到的问题

前提,已经弄好基本的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镜像版本了。

### 使用Docker创建并启动MySQL容器 为了创建并启动一个MySQL容器,可以按照如下方式操作: 对于初次设置环境而言,需要先从Docker Hub拉取官方的MySQL镜像。这一步骤可以通过命令`docker pull mysql:tag`完成,其中`tag`代表想要安装的具体版本号,例如5.7或8.0[^2]。 一旦获取到了所需的MySQL镜像之后,便能够利用该镜像创建一个新的容器实例。创建过程中需指定一些必要的参数以确保数据库能正常工作以及数据的安全性和持久化存储。具体来说,应该考虑以下几个方面: - **后台运行模式**:使用 `-d` 参数可以让容器以后台守护进程的方式运行。 - **端口映射**:采用 `-p 3306:3306` 将宿主机上的某个端口号(这里也是3306作为例子)绑定到容器内部的服务监听端口上,以便外部访问。 - **卷挂载**:借助 `-v /path/on/host:/var/lib/mysql` 和 `-v /path/to/conf.d:/etc/mysql/conf.d` 实现宿主机目录与容器内特定路径之间的双向同步,从而保障即使容器被删除后仍可保留重要资料,并允许自定义配置文件[^4]。 - **环境变量设定**:通过 `-e MYSQL_ROOT_PASSWORD=password` 来初始化root用户的登录凭证,这对于首次连接至关重要。 综合上述要点,完整的命令可能看起来像是这样: ```bash docker run -d \ -p 3306:3306 \ -v /my/own/datadir:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ --name my-mysql-container \ mysql:tag ``` 值得注意的是,在某些Linux发行版中可能会遇到因为SELinux安全策略而导致新创建MySQL容器无法顺利启动的情况。此时可通过调整SELinux状态至宽容模式(`setenforce 0`) 或者永久禁用它 (`sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config`) 的办法绕过此障碍[^1]。 最后,确认一切设置无误后再次尝试启动容器并通过 `docker ps` 检查其是否处于活动状态;如果一切正常,则表示已经成功部署了一个基于Docker平台运作的MySQL服务器实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值