从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. vue组件间的传值方式及方法调用汇总

    1.传值 a.父组件传子组件 方法一: 父页面: <myReportContent v-if="contentState==1" :paramsProps='paramsPr ...

  2. tornado 常见问题处理

    1 怎么获取从页面中的传值 使用 self.get_body_argument tornado的参数存储在self.request.body内,通过json以后就可以直接取值,当初我在前端使用angu ...

  3. oracle排序怎样弄成1 2 3 ,而不是 1 10 100

    oracle表字段设置得值不是number,而是Varchar2时排序就会出现这种问题 这个时候排序的时候需要转类型排序: order by to_number(顺序号) asc

  4. Oracle 多租户环境学习路线图

    Category Topic Documentation Concepts Overview of CDBs and PDBs "Overview of the Multitenant Ar ...

  5. win10开机后将存在多个系统选择,改为直接进入系统无需选择

    win10系统安装后,可能出现每次开机都要选择操作系统,比较麻烦,所以就来设置下如何直接进入系统,无须选择 1.我的电脑右键“属性”—“高级系统设置”—“系统属性” 2.设置“启动和故障恢复”如下 选 ...

  6. Java学习第三天之注释

    编写程序时,总需要为程序添加一些注释,用以说明某段代码的作用,或者说明某个类的用途.某个方法的功能,以及该方法的参数和返回值的数据类型及意义等. 一.为什么要添加注释? (1)便于自己理解:有些人可能 ...

  7. IPC——管道

    概述 管道通信分为无名管道.有名管道 管道通信的本质 不管是有名管道,还是无名管道,它们的本质其实都是一样的,它们都是内核所开辟的一段缓存空间.进程间通过管道通信时,本质上就是通过共享操作这段缓存来实 ...

  8. AppMain

    @Controller@ComponentScan@Configuration@EnableScheduling@EnableAutoConfiguration(exclude={DataSource ...

  9. Jupyter的学习

    一 .Jupyter中的魔术命令 %load test.py  :”可以将test.py 中的文件加载到jupyter框中 %matplotlib inline :可以将Matplotlib 的结果嵌 ...

  10. Sql中的主键和外键

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...