从docker hub上可以找到mysql外挂配置和数据目录的一些文档说明

https://hub.docker.com/_/mysql

从该文档中可以了解到,mysql的默认配置为/etc/mysql/my.cnf,该文件中包含了一个额外的数据目录/etc/mysql/conf.d 或者/etc/mysql/mysql.conf.d

先启动一个不带任何挂载的mysql容器

docker run -d -p : -e MYSQL_ROOT_PASSWORD= --name mysql_test2 mysql:5.7.

进入容器

docker exec -it mysql_test2 bash

根据上述docker hub上描述,可以发现/etc/mysql/conf.d/中存在三个文件,分别为docker.cnf,mysql.cnf和mysqldump.cnf,/etc/mysql/mysql.conf.d/下只存在一个文件mysqld.cnf

第一种启动方式

docker run -d -p : -v /etc/mysql/my.cnf:/etc/mysql/conf.d/mysql.cnf -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD= --name mysql_test mysql:5.7.

这样启动的容器中,/etc/mysql/conf.d/mysql.cnf中的内容将被/etc/mysql.my.cnf中文件内容覆盖

第二种启动方式

docker run -d -p : -v /etc/mysql/:/etc/mysql/conf.d/ -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD= --name mysql_test mysql:5.7.

这种方式将会把/etc/mysql/conf.d/下面的三个文件替换为外部挂载的my.cnf文件,也就是说,这种方式挂载了目录,容器中的目录与外部文件目录内容一致

第三种启动方式

docker run -d -p : -v /etc/mysql/my.cnf:/etc/mysql/conf.d/mysqld.cnf -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD= --name mysql_test mysql:5.7.

登录都容器中,可以发现/etc/mysql/conf.d/中的文件多了一个mysqld.cnf,且该文件即是我们外挂的my.cnf,而/etc/mysql/mysql.conf.d/mysqld.cnf中的内容依然是之前的

以上三种方式都可以实现外挂配置和数据目录,但首先配置中的文件路径在容器中需要存在,否则mysql容器将无法正常启动。个人觉得第二种看着顺眼点。:)

MYSQL8

mysql8中,/etc/mysql/my.cnf只依赖了/etc/mysql/conf.d/目录,所以上述的第三种方式就行不通了,另外如果配置文件中设置有socket,则client和mysqld设置的socket应该一致,如果去掉,就全部去掉,其他再有错误,根据mysql中错误日志查找下原因,一般都是因为配置

docker run -d -p : -v /etc/mysql/my.cnf:/etc/mysql/conf.d/mysqld.cnf -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD= --name mysql_test mysql

如果使用虚拟机,内存比较小时,注意max_connections和innodb_buffer_pool_size不要设置太大,否则启动会非常慢,本例中分别配置了2000和1200M,但当前虚拟机才给分配了1G内存,故启动的时候非常慢,一般前者调整为512 ~1000,后者为物理内存的60%~70%,但本虚拟机不止mysql,还有其他程序,故将两个参数分别改为200和100M,启动速度比之前快了好多倍

docker安装mysql挂载外部配置和数据目录的更多相关文章

  1. 33.Docker安装Mysql及用户配置

    mysql在官方上有两个镜像 这个是一个优化过的mysql 使用这个命令 安装mysql 演示最简单的方式去安装mysql: 这种方式安装的用户名没有,密码没有 docker run -d -p 33 ...

  2. Docker 安装mysql以及外部访问

    (1)因为我们的镜像是linux环境下的,我所在的系统是windows系统.首先通过docker客户端切换到linux环境下. (2)使用docker pull mysql/mysql-server ...

  3. 35.Docker安装Mysql挂载Host Volume

    连个文件系统有块区域Area,我们要做的是把两个Area做文件映射 jesse腾讯云上有个linux的环境,版本比较老了 简书的地址: https://www.jianshu.com/p/b3bf64 ...

  4. docker安装mysql挂载宿主本地目录资源后无法启动的问题

    可能是权限问题,添加--privileged=true参数: docker run -p : --name zsmysql -v $PWD/data:/var/lib/mysql -v $PWD/lo ...

  5. 使用Docker安装mysql,挂载外部配置和数据

    .挂载外部配置和数据安装 mkdir /opt mkdir /opt/mysql mkdir /opt/mysql/conf.d mkdir /opt/mysql/data/ 创建my.cnf配置文件 ...

  6. 【Docker】:使用docker安装mysql,挂载外部配置和数据

    普通安装 1.下载镜像,mysql 5.7 docker pull mysql:5.7 2.创建mysql容器,并后台启动 docker run -d -p 3306:3306 -e MYSQL_US ...

  7. 【Docker】:使用docker安装redis,挂载外部配置和数据

    普通安装 1.拉取镜像,redis:4.0 docker pull redis:4.0 2.创建redis容器名"redistest1",并开启持久化 docker run -d ...

  8. Docker安装mysql镜像并进行主从配置

    Docker安装mysql镜像并进行主从配置 1.下载需要的mysql版本镜像 docker pull mysql:5.6 2.启动mysql服务实例(基本启动) #启动主mysql docker r ...

  9. docker 安装mysql mongo

    Docker安装Mysql 1.拉取镜像 docker pull mysql/mysql-server 2.运行mysql docker run -d -p : --name [Name] [Imag ...

随机推荐

  1. element-ui重置表单并清除校验的方法

    this.$refs['activityForm'].resetFields(); 只会重置之前表单的内容,并不会清空 只需在关闭弹框的cancel方法中写上重置表单的方法即可 cancel() { ...

  2. 装机篇:ubuntu 14.04 在英文环境下安装中文输入法(转载)

    ubuntu默认的输入法是ibus,综合网上评论,fcitx的支持者更多,而且个人感觉fcitx也的确不错,可以满足日常输入. STEP1: 在Ubuntu Software Center 搜索fci ...

  3. java中的管程

    前言 ​ 并发编程这个技术领域已经发展了半个世纪了,相关的理论和技术纷繁复杂.那有没有一种核心技术可以很方便地解决我们的并发问题呢?这个问题如果让我选择,我一定会选择管程技术.Java 语言在 1.5 ...

  4. 使用vs编写arduino项目

    说实话,arduino官方自带的编辑器有时候用的真不爽.所以直接使用vs开发arduino项目,用起来真爽,一直使用一直爽. 不多废话,直接上图,三部曲结束,搞定,收工. 我用的是vs2015版本的. ...

  5. Python For嵌套循环 图形打印X型 nested loop - 练习题答案

    上一篇:Python For嵌套循环 图形打印X型 nested loop - 练习题 上一篇留的Python For嵌套循环 图形打印X型练习题的答案. 由于网上很多嵌套循环都是C++语言写的,用P ...

  6. No PostCSS Config found in报错解决

    前情提要]日前本人将本地项目上传GitHub之后,然后再clone到本地,运行是报错:Error: No PostCSS Config found in... 项目在本地打包运行的时候不报错,上传到 ...

  7. java学习笔记15-封装

    把属性(成员变量)设置为私有(private),把方法设置为共有的(public),假如外界想要得到或者改变某个属性,只能通过方法来办到,这其实是封装的思想之一. 新建一个Student类,这个类有几 ...

  8. Pytest【定制fixture】

    在pytest中的fixture是在测试函数运行前后,由pytest执行的外壳函数,fixture中的代码可以定制,满足多变的测试需求:包括定义传入测试中的数据集.配置测试前系统的初始化状态.为批量测 ...

  9. TODO:AppiumTestDistribution--CapabilityManager 类

    该类代码详见git:https://github.com/AppiumTestDistribution/AppiumTestDistribution/tree/master/src/main/java ...

  10. vue-cli3 将自己写的组件封装成可引入的js文件

    一.调整项目结构 首先用 vue-cli 创建一个 default 项目 // 顺便安利一篇文章<Vue 爬坑之路(十二)—— vue-cli 3.x 搭建项目> 当前的项目目录是这样的: ...