Docker安装MySQL 8.0并挂载数据与配置文件

安装部署环境

  • CentOS 7.9
  • Docker  20.10.7
  • MySQL latest(8.0.17)

下载镜像

# docker从仓库中拉取最新版的mysql镜像,如果没加标签的话,默认获取最新的版本 Docker pull mysql

挂载数据卷以及配置文件

Docker容器原则上是短暂的,如果容器被删除或损坏,任何数据或配置都将丢失。因为,我们需要将 Docker 内的 MySQL 数据文件以及配置文件转移到宿主机的指定路径。

每个人部署的 MySQL 内,可能文件路径不一致。我们可以先创建个测试的 MySQL 容器,然后再根据查找出的文件具体路径位置,重新创建我们符合我们需求的 MySQL 容器,命令如下:

docker run --name mysqltest \ -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root \ -d mysql

进入Docker容器内

docker exec -it mysqltest bash

确定Docker内 MySQL 文件相关路径

根据官网说明:如果要挂载 MySQL 配置文件的话,我们必须在物理机上存在着该配置文件。

# 查找Docker内,MySQL配置文件my.cnf的位置 mysql --help | grep my.cnf # 显示如下,意思是路径按优先排序,会是在以下路径里: order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf # 配置文件的路径不一定都一样,有些博客介绍的位置是在/etc/my.cnf。而本人实际存在位置是在/etc/mysql/my.cnf

查找数据文件位置

用于在容器上运行docker inspect命令的JSON输出具有一个 Mount密钥,其值提供了有关数据目录卷的信息:

docker inspect mysqltest ... "Mounts": [ { "Type": "volume", "Name": "dffc3c7122a1407533c7ebe76d6dc096fbf8ef8645339c735f8d13ff33b81271", "Source": "/var/lib/docker/volumes/dffc3c7122a1407533c7ebe76d6dc096fbf8ef8645339c735f8d13ff33b81271/_data", "Destination": "/var/lib/mysql", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], ...

输出显示源文件夹:/var/lib/docker/volumes,表示已安装在 /var/lib/mysql容器内的服务器数据目录中。

创建本地路径并挂载Docker内数据

接下来,我们需要在物理机上,创建指定好一个数据和配置文件的挂载路径。

mkdir -p /docker/mysql/conf && mkdir -p /docker/mysql/datadir

创建好本地的挂载数据路径后,我们再将测试容器里 MySQL 的配置文件复制到该路径。日后需改配置,直接在挂载路径的配置文件上修改即可。

docker cp mysqltest:/etc/mysql/my.cnf /docker/mysql/conf

创建 MySQL 容器并启动

先停掉之前启动的mysqltest

docker rm -f 容器id
解决了配置文件的问题,就可以根据需求创建我们的 MySQL 容器并挂载数据了。
docker run --name mysql \ -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \ --mount type=bind,src=/docker/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf \ --mount type=bind,src=/docker/mysql/datadir,dst=/var/lib/mysql \ --restart=on-failure:3 \ -d mysql
  • --name:为容器指定一个名字
  • -p:指定端口映射,格式为:主机(宿主)端口:容器端口
  • -e:username="xxx",设置环境变量
  • --restart=on-failure:3:是指容器在未来出现异常退出(退出码非0)的情况下循环重启3次
  • -mount:绑定挂载
  • -d:后台运行容器,并返回容器 id

网上许多人的博客写的挂载 MySQL数据卷方法,采用的是--volume,但是在最新的MySQL官方Docker搭建MySQL文档中,建议我们大家使用--mount,因为研究表明它更易于使用。故我们根据官网推荐的方法,这里也采用--mount挂载。

查看在运行的容器

docker ps

 我们可以看到mysql1容器正在运行,包括之前我们创建的测试容器。

************

docker run --name mysql \ -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \ -v /docker/mysql/conf/my.cnf:/etc/mysql/my.cnf \ -v /docker/mysql/datadir:/var/lib/mysql \ --restart=on-failure:3 \ -d mysql

 

 


__EOF__

本文作者东峰叵.com
本文链接https://www.cnblogs.com/databank/p/15557035.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   东峰叵,com  阅读(879)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示