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

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

场景

市民赵铁柱在A公司担任开发工程师,某日负责维护的一个网站无法访问。经排查发现,问题出在docker的mysql容器挂了。赵铁柱不慌不忙,倒了杯咖啡,然后稳健地启动了mysql容器。然而,启动成功后测试访问,发现网站数据全没了。让我们为赵铁柱默哀三秒钟。

分析原因

赵铁柱的错误在于没有进行数据持久化。为了偷懒,他没有将mysql容器的数据挂载到宿主机上,导致数据丢失。

解决方案

解决这个问题,需要采取以下步骤:

结论

将数据从容器中挂载到宿主机上,这样即使容器停止或重新启动,数据也不会丢失。

创建配置文件

1. 创建配置文件存放位置和数据映射位置: ```bash mkdir -p /mysql/config /mysql/data ``` 2. 创建并编辑配置文件: ```bash vi /mysql/config/my.conf ``` 配置文件内容如下: ```bash [mysqld]user=mysqlcharacter-set-server=utf8default_authentication_plugin=mysql_native_password[client]default-character-set=utf8[mysql]default-character-set=utf8 ```

启动容器

1. 停止已运行的mysql容器: ```bash docker ps docker stop mysql57 ```2. 启动新的mysql容器: ```bash 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 ``` 说明: - `-d`:后台运行容器 - `-p 3306: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`:镜像名称和版本

测试连接

确认mysql服务已正常运行,访问数据库验证数据是否恢复。

验证数据持久化

为了确保数据安全,可以采取以下步骤: 1. 创建数据库,创建表,插入数据: ```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; ``` 执行SQL脚本后,插入测试数据: ```sql INSERT INTO `test_table` VALUES ('aaaa', '测试数据'); ```2. 关闭当前mysql容器: ```bash docker stop dream_mysql57 ```3. 启动新的mysql容器: ```bash 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 ```4. 访问3307服务,确认数据仍在。

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

你可能感兴趣的文章
Postgresql中PL/pgSQL的游标、自定义函数、存储过程的使用
查看>>
SpringBoot中集成XXL-JOB分布式任务调度平台,轻量级、低侵入实现定时任务
查看>>
Postgresql中的表结构和数据同步/数据传输到Mysql
查看>>
Postgresql中自增主键序列的使用以及数据传输时提示:错误:关系“xxx_xx_xx_seq“不存在
查看>>
SpringBoot中集成websocket后WebSocketServer中注入mapper为空
查看>>
postgreSQL入门命令
查看>>
PostgreSQL删除数据库报"ERROR: There is 1 other session using the database."
查看>>
Qt开发——爱情公寓人事管理系统
查看>>
Qt开发——文件下载软件
查看>>
PostgreSQL和Oracle两种数据库有啥区别?如何选择?
查看>>
Qt开发——多线程网络时间服务器端
查看>>
Postgresql在Windows中使用pg_dump实现数据库(指定表)的导出与导入
查看>>
PostgreSQL在何处处理 sql查询之四
查看>>
postgresql基本使用
查看>>
PostgreSQL学习总结(10)—— PostgreSQL 数据库体系架构
查看>>
PostgreSQL学习总结(11)—— PostgreSQL 常用的高可用集群方案
查看>>
Qt开发——多线程网络时间客户端
查看>>
PostgreSQL学习总结(13)—— PostgreSQL 15.8 如何成就数据库性能王者?
查看>>
PostgreSQL学习总结(13)—— PostgreSQL 目录结构与配置文件 postgresql.conf 详解
查看>>
PostgreSQL学习总结(1)—— PostgreSQL 入门简介与安装
查看>>