docker资料卷——mysql

摘要:
接下来,我需要创建一个路径来存储数据卷。我创建的目录是/docker/mysql/data和/docker/mysql/conf。d、 前者是数据目录,后者是配置目录。后来,我分别在winDocker和linuxDocker下设置了mysql数据卷,但只有Linux才能运行。winDocker的数据量可以设置成功,但重启docker后会出现mysql容器无法启动的错误。根据官方mysql声明,Docker中的官方mysql镜像是Oracle专门为Linux平台构建的。据推测,winDocker无法正确装载数据卷和官方支持是有原因的。建议学生直接启动Linux。
简介

docker是运行在虚拟环境中的,这样会有一个问题,那就是储存在docker内的数据会随着docker的重启、宕机而丢失,从而造成不可估量的损失。

所以docker提供了-v指令,可以将容器内的目录以及文件映射到外部文件系统,容器启动时会读取外部文件系统,从而保证数据的完整性。

mysql作为最流行的数据库之一,使用范围十分广泛,如果部署在docker却无法持久化怎么办呢?今天就来说一下mysql资料卷。

MySql资料卷

mysql需要保存的只有两种文件:数据和配置文件。mysql的默认配置文件是 /etc/mysql/my.cnf (winDocker下是 /etc/my.cnf),如果是docker下的mysql,建议在 /etc/mysql/conf.d 目录中创建 .cnf 文件。新建的文件只要保证后缀名是 cnf 即可覆盖配置项。至于mysql数据存放的目录,可以在mysql配置文件中找到:

docker资料卷——mysql第1张

文件写的很清楚,数据保存在 /var/lib/mysql 路径。接下来需要创建存放资料卷的路径,我创建的目录是 /docker/mysql/data 和 /docker/mysql/conf.d,前者是数据目录,后者是配置目录。接下来需要在本机指定位置新建目录(我已经创建好了):

docker资料卷——mysql第2张

现在编写命令:

docker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /docker/mysql/data/:/var/lib/mysql/ -v /docker/mysql/conf.d:/etc/mysql/conf.d --name mysql01 mysql

这命令有些长,解释一下:

-itd:开启交互模式,模拟终端,后台运行

-p 3306:3306:对应端口映射到宿主机

-e MYSQL_ROOT_PASSWORD=123456:设置root账户密码为123456

-v /docker/mysql/data/:/var/lib/mysql/:将宿主机的 /docker/mysql/data/ 目录与mysql的 /var/lib/mysql/ 同步

-v /docker/mysql/conf.d:/etc/mysql/conf.d:将宿主机的 /docker/mysql/conf.d 目录与mysql的 /etc/mysql/conf.d 同步

--name mysql01:自定义容器名称

mysql:运行的镜像名称

这一命令执行过后,你会看到新容器mysql01已经正常启动了:

docker资料卷——mysql第3张

正常情况下,你设置的目录下会多出一些文件:

docker资料卷——mysql第4张

接下来测试一下。通过客户端连接到docker下的mysql(如果不知道如何使用客户端连接docker下的mysql,请翻我之前的博文),新建数据库:

docker资料卷——mysql第5张

然后重启docker:

docker资料卷——mysql第6张 

重启成功以后,进入容器查看数据库:

docker资料卷——mysql第7张

数据库并没有因为docker重启而被初始化,证明资料卷已经生效。以后再也不怕Docker宕机而数据丢失了。

后言

我分别在winDocker和linuxDocker下设置了mysql资料卷,但只有linux可以跑得起来。winDocker的资料卷可以设置成功,但是重启docker后会出现无法启动mysql容器的错误。根据mysql官方声明得知,docker内的mysql官方镜像是oracle公司专门为linux平台构建的,推测winDocker无法正确挂载资料卷应该和官方支持有点原因,建议同学们直接上手linux。

免责声明:文章转载自《docker资料卷——mysql》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Erlang--etc结构解析【转】centos 服务开机启动下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用Logstash把MySQL数据导入到Elasticsearch中

总结:这种适合把已有的MySQL数据导入到Elasticsearch中 有一个csv文件,把里面的数据通过Navicat Premium 软件导入到数据表中,共有998条数据 文件下载地址:https://files.cnblogs.com/files/sanduzxcvbnm/SalesJan2009.zip csv文件格式如下: Logstash 配置...

01、MySQL_简介

数据库概念   数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。   数据库:存储数据的仓库 数据库分类 网络数据库   网络数据库是指把数据库技术引入到计算机网络系统中,借助于网络技术将存储于数据库中的大量信息及时发布出去;而计算机网络借助于成熟的数据库技术对网络中的各种数据进行有效管理,并实现用户与网络中的...

docker.service启动失败:Unit not found的原因及解决办法

原因1:docker.socket 最初在启动docker时遇到问题,是因为docker.socket引起的,虽然记不清问题是表现为Unit not found还是执行systemctl start docker.service命令时hang住了,但是也一并记录在这里。 问题描述 我是从Docker 1.10.3升级到1.13.1版本,通过rpm包安装的。...

从Oracle转到Mysql前需了解的50件事

我本人比较关心的几点:   1. 对子查询的优化表现不佳.   2. 对复杂查询的处理较弱   4. 性能优化工具与度量信息不足   12. 支持 SMP (对称多处理器),但是如果每个处理器超过 4 或 8 个核(core)时,Mysql 的扩展性表现较差.   15. 没有基于回滚(roll-back)的恢复功能,只有前滚(roll-forward)的...

mysql三种删除方式

一般来说mysql有三种删除数据方式: 1. delete(常用) 2. truncate(慎用) 3. drop 以上三种方式都可以删除数据,但是使用场景是不同的。 从执行速度来说: drop > truncate >> DELETE 深入底层来说: 一、DELETE DELETE是属于数据库的DML操作语言,使用delete删除数据时...

mysql--统计每个用户的累计访问次数

create table action(userId VARCHAR(10),visitDate VARCHAR(10),visitCount int ); insert into action values('u01','2017/1/21',5),('u02','2017/1/23',6),('u03','2017/1/22',8),('u04','2...