博客
关于我
公司mysql docker容器挂了,数据丢失,老板要起诉我。。
阅读量:362 次
发布时间:2019-03-04

本文共 2091 字,大约阅读时间需要 6 分钟。


目录


场景

市民赵铁柱在A公司担任开发工程师,某日赵铁柱负责维护的一个网站无法访问,经排查,是docker的mysql容器挂了,这个简单,赵铁柱不慌不忙,倒了杯咖啡,然后不急不缓地启动了mysql容器。心想着中午点个什么外卖好。

看到mysql容器启动成功了,然后自己访问网站测试了下,数据全没了。。让我们为市民赵铁柱默哀三秒钟

分析原因

赵铁柱是犯了什么错误,导致数据丢失的呢。

经排查发现,赵铁柱为了偷懒,没有做mysql容器的数据持久化

解决方案

结论

将数据从容器中挂载到宿主机上

不了解docker的数据卷挂载的同学,可以看这里:

1、创建配置文件

创建配置文件存放位置 和数据映射位置

mkdir -p /mysql/config /mysql/data

创建编辑配置文件

vi /mysql/config/my.conf

 my.conf配置文件内容如下

 

[mysqld]user=mysqlcharacter-set-server=utf8default_authentication_plugin=mysql_native_password[client]default-character-set=utf8[mysql]default-character-set=utf8

2、启动容器

先查看下已经在运行的容器,把mysql57容器停止服务

docker psdocker stop mysql57

 0

docker run -d -p 3306:3306 --restart always --privileged=true --name dream_mysql57 -e MYSQL_ROOT_PASSWORD=root -v /mysql/config/my.conf:/etc/my.cof -v=/mysql/data:/var/lib/mysql mysql:5.7

 0

-d 	后台运行容器-p 3306:3306 	指定端口映射(主机(宿主)端口:容器端口)--restart=always 	开机启动--privileged=true 	提升容器内权限--name 	为容器指定一个名称-e  	设置环境变量MYSQL_ROOT_PASSWORD=root 	初始密码-v /mysql/config/my.conf:/etc/my.cof 映射配置文件-v=/mysql/data:/var/lib/mysql 映射数据目录mysql:5.7 	镜像名称和版本号

3、测试连接

0

4、验证数据持久化

1、创建数据库,创建表,插入数据

0

进入test数据库中执行下面的sql脚本

DROP TABLE IF EXISTS `test_table`;CREATE TABLE `test_table` (  `uuid` varchar(32) NOT NULL,  `test_name` varchar(32) NOT NULL COMMENT '姓名',  PRIMARY KEY (`uuid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of test_table-- ----------------------------INSERT INTO `test_table` VALUES ('aaaa', '测试数据');

0

2、再启动一个新的mysql容器,关闭当前mysql容器

启动dream_mysql57_3307容器,对外映射端口是3307

docker run -d -p 3307:3306 --restart always --privileged=true --name dream_mysql57_3307 -e MYSQL_ROOT_PASSWORD=root -v /mysql/config/my.conf:/etc/my.cof -v=/mysql/data:/var/lib/mysql mysql:5.7

关闭当前mysql容器

docker stop dream_mysql57

0

访问3307服务 

0

0

数据还是在的

3、有同学可能会问,如果把当前的容器都删除了,那再启动一个新的mysql容器,数据还在不在

心动不如行动,我们来验证下

先把mysql容器全干掉

0

现在没了

0 然后重新创建mysql容器

docker run -d -p 3306:3306 --restart always --privileged=true --name dream_mysql57_3306 -e MYSQL_ROOT_PASSWORD=root -v /mysql/config/my.conf:/etc/my.cof -v=/mysql/data:/var/lib/mysql mysql:5.7

先别急着访问,先看下容器有没有启动

容器是启动的

0

然后通过客户端访问下

0 

0

数据也是在的。这回老板不会起诉我了,开心。。

转载地址:http://qrbg.baihongyu.com/

你可能感兴趣的文章
Linux下的系统监控与性能调优:从入门到精通
查看>>
LiveGBS user/save 逻辑缺陷漏洞复现(CNVD-2023-72138)
查看>>
localhost:5000在MacOS V12(蒙特利)中不可用
查看>>
logstash mysql 准实时同步到 elasticsearch
查看>>
Luogu2973:[USACO10HOL]赶小猪
查看>>
mabatis 中出现< 以及> 代表什么意思?
查看>>
Mac book pro打开docker出现The data couldn’t be read because it is missing
查看>>
MAC M1大数据0-1成神篇-25 hadoop高可用搭建
查看>>
mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
查看>>
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
MangoDB4.0版本的安装与配置
查看>>
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MariaDB的简单使用
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>