公司mysql docker容器挂了,数据丢失,老板要起诉我。。
目录
3、有同学可能会问,如果把当前的容器都删除了,那再启动一个新的mysql容器,数据还在不在
场景
市民赵铁柱在A公司担任开发工程师,某日赵铁柱负责维护的一个网站无法访问,经排查,是docker的mysql容器挂了,这个简单,赵铁柱不慌不忙,倒了杯咖啡,然后不急不缓地启动了mysql容器。心想着中午点个什么外卖好。
看到mysql容器启动成功了,然后自己访问网站测试了下,数据全没了。。让我们为市民赵铁柱默哀三秒钟
分析原因
赵铁柱是犯了什么错误,导致数据丢失的呢。
经排查发现,赵铁柱为了偷懒,没有做mysql容器的数据持久化
解决方案
结论
将数据从容器中挂载到宿主机上
不了解docker的数据卷挂载的同学,可以看这里:docker将数据从宿主机挂载到容器的方式(一)
1、创建配置文件
创建配置文件存放位置 和数据映射位置
mkdir -p /mysql/config /mysql/data
 
创建编辑配置文件
vi /mysql/config/my.conf
 
my.conf配置文件内容如下
 
  
   - 
    
     
    
    
     
      [mysqld]
     
    
 
   - 
    
     
    
    
     
      user=mysql
     
    
 
   - 
    
     
    
    
     
      character-set-server=utf8
     
    
 
   - 
    
     
    
    
     
      default_authentication_plugin=mysql_native_password
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      [client]
     
    
 
   - 
    
     
    
    
     
      default-character-set=utf8
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      [mysql]
     
    
 
   - 
    
     
    
    
     
      default-character-set=utf8
     
    
 
  
 
2、启动容器
先查看下已经在运行的容器,把mysql57容器停止服务
  
   - 
    
     
    
    
     
      docker ps
     
    
 
   - 
    
     
    
    
     
      docker stop mysql57
     
    
 
  
 
 
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 指定端口映射(主机(宿主)端口:容器端口)
     
    
 
   - 
    
     
    
    
     
      --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、测试连接

4、验证数据持久化
1、创建数据库,创建表,插入数据

进入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', '测试数据');
     
    
 
  
 

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
 

访问3307服务


数据还是在的
3、有同学可能会问,如果把当前的容器都删除了,那再启动一个新的mysql容器,数据还在不在
心动不如行动,我们来验证下
先把mysql容器全干掉

现在没了
 然后重新创建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
 
先别急着访问,先看下容器有没有启动
容器是启动的

然后通过客户端访问下
 

数据也是在的。这回老板不会起诉我了,开心。。
文章来源: xiaoxuzhu.blog.csdn.net,作者:小虚竹,版权归原作者所有,如需转载,请联系作者。
原文链接:xiaoxuzhu.blog.csdn.net/article/details/114766203
- 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)