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

安装部署环境

  • Ubuntu 18.04.3 LTS
  • Docker 19.03.2
  • 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。而本人Ubuntu系统上,实际存在位置是在/etc/mysql/my.cnf

查找数据文件位置

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

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

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

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

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

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

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

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

创建 MySQL 容器并启动

解决了配置文件的问题,就可以根据需求创建我们的 MySQL 容器并挂载数据了。

docker run --name mysql1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --mount type=bind,src=/home/docker/mysql/conf/my.cnf,dst=/etc/mysql/my.cnf --mount type=bind,src=/home/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容器正在运行,包括之前我们创建的测试容器。

原文地址:https://www.cnblogs.com/jbxie/p/12075423.html

时间: 2024-08-29 22:51:57

Docker安装MySQL 8.0并挂载数据及配置文件的相关文章

docker安装MySQL 8.0及初始化错误处理

Preface     Several days ago,I've implement a docker environmnet,I'm gonna Install a MySQL 8.0 version on it.Let's see the detail of it.   Procedure Check and run docker container again. 1 [[email protected] vagrant]# docker images 2 REPOSITORY TAG I

Docker安装MySQL Tomcat Python Redis MongoDB Apache

Docker 安装 MySQL 方法一.docker pull mysql 查找Docker Hub上的mysql镜像 [email protected]:/mysql$ docker search mysql NAME                     DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED mysql                    MySQL is a wide

CentOS7 下源码安装MySQL 8.0.11

CentOS7 下源码安装MySQL 8.0.11 系统环境:CentOS7, 内核:Linux 3.10.0-862.el7.x86_64 如果有旧版本的MySQL,先卸载,用下面命令来查询出系统有哪些相关的MySQL包. rpm -qa | grep mysql 如果上述命令查询出有相关的MySQL包,就卸载 rpm -e 包名 卸载MariaDB包 yum remove mariadb-libs.x86_64 从MySQL官网下载源码包,并将该文件拷贝到系统中. https://dev.m

Docker安装MySQL忽略大小写问题的问题

原文:Docker安装MySQL忽略大小写问题的问题 连接MySQL: 查看当前mysql的大小写敏感配置show global variables like '%lower_case%';+------------------------+-------+| Variable_name          | Value |+------------------------+-------+| lower_case_file_system | ON    || lower_case_table_

Centos 7 安装 docker ,docker 安装 mysql 、 tomcat

一.安装docker 不要看其他的博客文档.就按照菜鸟教程执行. 菜鸟教程地址: http://www.runoob.com/docker/centos-docker-install.html 装了几次启动不了.按照这个流程一遍OK 我的环境是Centos 7, 内核 3.10版本.安装docker CE,社区免费版 移除旧的版本: $ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \

Ubuntu16.04 服务器 用docker安装MySQL

1.查找Docker Hub上的mysql镜像 sudo docker search mysql 2.拉取官方镜像 sudo docker pull mysql 3.查看镜像相关信息 sudo docker images 4 .使用容器运行mysql镜像 sudo docker run --name mysqldb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest 5.查看容器启动 sudo docker ps 6.docker

虚拟机中docker安装mysql远程无法访问解决方法

#docker安装mysql docker pull mysql docker run --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123 -d mysql 这个时候navicat远程连接mysql的时候,会提示以下错误: 解决方法:1.在虚拟机中登录到mysql容器,然后进入mysql docker exec -it mysql /bin/bash mysql -uroot -p Enter password: mysql> select

win10 安装mysql 8.0.18 解决Navicat初次连接报错

win10 安装mysql 8.0.18 解决Navicat初次连接报错 win10 安装mysql 8.0.18-winx64 一,先去官网下载mysql 安装包 https://dev.mysql.com/downloads/mysql/ 3.管理员命令运行 命令行,进入mysql 安装包的 bin 目录(D:\MySQL\mysql-8.0.18-winx64\bin) 4.执行 命令 mysqld --initialize --console (会自动生成data 文件夹,且生成临时密码

安装 Mysql 8.0.x 的艰难体验

背景: Mysql 8.0 以后版本,在性能等方面有了很大提升,而且在自动编号.Timestamp等字段的设置上有了很方便的进步,因此在一年前即开始将原有的基于5.5版本的服务器逐渐向8.0.x 转移.但转移的过程问题颇多,主要的几个障碍如下: 1.需要各种visual c++ 的可发布版本:(8.0以后的小版本要求有所不同) 2.需要python 3.7版本.(8.0以后的小版本要求有所不同) 第一次安装时相对顺利,可能的原因是该服务器是一个“干净”的服务器,而且安装的是8.0.16版Mysq