公司mysql docker容器挂了,数据丢失,老板要起诉我。。

举报
小虚竹 发表于 2021/10/19 22:38:01 2021/10/19
【摘要】 docker使用教程相关系列 目录 目录 场景 分析原因 解决方案 结论 1、创建配置文件 2、启动容器 3、测试连接 4、验证数据持久化 1、创建数据库,创建表,插入数据 2、再启动一个新的mysql容器,关闭当前mysql容器 3、有同学可能会问,如果把当前的容器都删除了,那再启动一个新的mysql容器,数...

docker使用教程相关系列 目录


目录

场景

分析原因

解决方案

结论

1、创建配置文件

2、启动容器

3、测试连接

4、验证数据持久化

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

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

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


场景

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

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

分析原因

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

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

解决方案

结论

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

不了解docker的数据卷挂载的同学,可以看这里:docker将数据从宿主机挂载到容器的方式(一)

1、创建配置文件

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

mkdir -p /mysql/config /mysql/data
 

创建编辑配置文件

vi /mysql/config/my.conf
 

 my.conf配置文件内容如下

 


  
  1. [mysqld]
  2. user=mysql
  3. character-set-server=utf8
  4. default_authentication_plugin=mysql_native_password
  5. [client]
  6. default-character-set=utf8
  7. [mysql]
  8. default-character-set=utf8

2、启动容器

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


  
  1. docker ps
  2. docker 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


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

3、测试连接

0

4、验证数据持久化

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

0

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


  
  1. DROP TABLE IF EXISTS `test_table`;
  2. CREATE TABLE `test_table` (
  3. `uuid` varchar(32) NOT NULL,
  4. `test_name` varchar(32) NOT NULL COMMENT '姓名',
  5. PRIMARY KEY (`uuid`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  7. -- ----------------------------
  8. -- Records of test_table
  9. -- ----------------------------
  10. 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

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

文章来源: xiaoxuzhu.blog.csdn.net,作者:小虚竹,版权归原作者所有,如需转载,请联系作者。

原文链接:xiaoxuzhu.blog.csdn.net/article/details/114766203

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。