Docker容器的数据卷备份与恢复

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Docker容器的数据卷备份与恢复

数据卷的备份与恢复


-备份-


注:


  -v指定数据卷时,如果数据卷不存在则自动创建。


1.使用nginx基础镜像新启动一个名为nginx的容器,-v指定数据卷名为web并挂载到nginx容器的/mnt/web目录

[root@localhost ~]# docker run -itd --name nginx -v web:/mnt/web nginx
3e99025339a4600ae7f607fbaafaff9f36bdf8d8533aaa441a42103be4260de5
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
3e99025339a4        nginx               "nginx -g 'daemon of…"   3 minutes ago       Up 3 minutes        80/tcp              nginx
[root@localhost ~]# docker volume ls
DRIVER              VOLUME NAME
local               web      //可以看到web数据卷自动创建

2.在名为nginx的容器中新增数据


  可以进入nginx容器中新增,也可以直接使用docker命令新增数据。

[root@localhost ~]# docker exec -it nginx mkdir /mnt/web/test
[root@localhost ~]# docker exec -it nginx touch /mnt/web/data.txt
[root@localhost ~]# docker exec -it nginx ls /mnt/web
data.txt  test        //可以看到新增的文件夹与文本文件

3.数据卷备份


命令详解:


 使用nginx基础镜像新建一个临时的容器(不放入后台运行),数据共享容器nginx的数据卷web,并且-v 指定将本机的/root/test目录挂载到临时容器的/backup目录,执行备份命令将临时容器的/mnt/web目录打包压缩到/backup目录下名为web.tar的备份文件(因为数据卷web挂载到了nginx容器的/mnt/web目录,而临时容器又共享了nginx容器的数据卷web,所以直接打包容器的/mnt/web目录即可) (因为本机的/root/test目录挂载到了临时容器的/backup目录,所以可以直接在本机的/root/test目录中查找备份文件web.tar即可)

[root@localhost ~]# docker run -it --volumes-from nginx -v /root/test:/backup nginx tar cvf /backup/web.tar /mnt/web
tar: Removing leading `/' from member names
/mnt/web/
/mnt/web/test/
/mnt/web/data.txt
[root@localhost ~]# ll -h /root/test/
总用量 357M
-rw-r--r-- 1 root root  10K 5月  13 02:29 web.tar      //备份数据

-恢复-


1.用nginx基础镜像新启动一个带有空数据卷webdata的容器nginxback

[root@localhost ~]# docker run -itd --name nginxback -v webdata:/mnt/web nginx
33149ce377ae168d09f69227c8216db731e24593db7f57f0cca594d011a7c9c9
[root@localhost ~]# docker volume ls
DRIVER              VOLUME NAME
local               web
local               webdata    //自动创建的新数据卷(用于恢复数据)
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
33149ce377ae        nginx               "nginx -g 'daemon of…"   3 seconds ago       Up 1 second         80/tcp              nginxback
3e99025339a4        nginx               "nginx -g 'daemon of…"   7 minutes ago       Up 7 minutes        80/tcp              nginx

2.数据卷恢复


命令详解:


 使用nginx基础镜像新建一个临时的容器(不放入后台运行),数据共享容器nginxback的数据卷

webdata(作用是将web.tar文件数据恢复至数据卷webdata),并且-v 指定将本机的/root/test目录挂载到临时容器的/backup目录,所以直接执行恢复命令将临时容器的/backup目录下名为web.tar的备份文件恢复至nginxback容器的数据卷webdata中 。

[root@localhost ~]# docker run -it --volumes-from nginxback -v /root/test:/backup nginx tar xvf /backup/web.tar
mnt/web/
mnt/web/test/
mnt/web/data.txt
[root@localhost ~]# docker volume ls
DRIVER              VOLUME NAME
local               web
local               webdata
[root@localhost ~]# docker exec -it nginx ls /mnt/web   
data.txt  test      //原始数据容器nginx中的数据(数据卷web)
[root@localhost ~]# docker exec -it nginxback ls /mnt/web
data.txt  test     //备份数据卷恢复后的nginxback容器中的数据(数据卷webdata)

3.为了验证web数据卷备份恢复到webdata数据卷的数据,再启动一个新容器挂载webdata数据卷查看数据

[root@localhost ~]# docker run -itd --name webtest -v webdata:/mnt/web nginx
60e73b319aff246ac2d1debca13b1d7581a056d8a13a9c508ae614f4a58273a5
   //启动新容器webtest,并且-v将webdata数据卷挂载到容器/mnt/web目录
[root@localhost ~]# docker exec -it webtest ls /mnt/web
data.txt  test        //查看容器webtest中的数据

Mysql容器数据卷的备份与恢复问题?


问题:


   使用上面nginx数据卷备份恢复的方法对mysql容器数据卷进行备份与恢复,在备份与恢复的过程都能够看到新建的test库,但是恢复之后数据库中就是没有test库,不知道是什么问题?有懂的大佬解答一下,万分感谢!!!


实验过程:


1.使用mysql基础镜像新启动一个mysql4容器,-v指定数据卷名为mysql并挂载到mysql4容器的/var/lib/mysql目录,-e设置mysql4容器数据库密码为123。

[root@localhost ~]# docker run -itd --name mysql4 -v mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 mysql
    //启动mysql4容器,-v指定数据卷mysql挂载到/var/lib/mysql目录,-e设置密码
[root@localhost ~]# docker volume ls    //查看创建的数据卷
DRIVER              VOLUME NAME
local               mysql
[root@localhost ~]# docker ps     //查看运行的mysql4容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
7632976b82d4        mysql               "docker-entrypoint.s…"   6 hours ago         Up 6 hours          3306/tcp, 33060/tcp   mysql4

2.进入mysql4容器并创建新库test

[root@localhost ~]# docker exec -it mysql4 /bin/bash
root@7632976b82d4:/# mysql -uroot -p123
...
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.68 sec)
mysql> create database test;       //创建test库
Query OK, 1 row affected (0.24 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.01 sec)

3.数据卷mysql备份


命令详解:


 使用mysql基础镜像新建一个临时的容器(不放入后台运行),数据共享容器mysql4的数据卷mysql,并且-v 指定将本机的/root/test目录挂载到临时容器的/backup目录,执行备份命令将临时容器

的/var/lib/mysql目录打包压缩到/backup目录下名为test.tar的备份文件(因为数据卷mysql挂载到了mysql4容器的/var/lib/mysql目录,而临时容器又共享了mysql4容器的数据卷mysql,所以直接打包容器的/var/lib/mysql目录即可) (因为本机的/root/test目录挂载到了临时容器的/backup目录,所以可以直接在本机的/root/test目录中查找备份文件test.tar即可)

[root@localhost ~]# docker stop mysql4
mysql4
[root@localhost ~]# docker run -it --volumes-from mysql4 -v /root/test:/backup mysql tar cvf /backup/test.tar /var/lib/mysql
tar: Removing leading `/' from member names
/var/lib/mysql/
/var/lib/mysql/ibdata1
/var/lib/mysql/ib_logfile1
/var/lib/mysql/#ib_16384_0.dblwr
/var/lib/mysql/#ib_16384_1.dblwr
...
/var/lib/mysql/1d90619790ec.err
/var/lib/mysql/binlog.000001
/var/lib/mysql/binlog.000002
/var/lib/mysql/test/
/var/lib/mysql/binlog.000003
/var/lib/mysql/binlog.000004
/var/lib/mysql/binlog.000005
/var/lib/mysql/binlog.000006
/var/lib/mysql/binlog.000007
/var/lib/mysql/binlog.000008
/var/lib/mysql/binlog.index
/var/lib/mysql/ib_buffer_pool
[root@localhost ~]# ll -h /root/test/       //查看备份文件
总用量 172M
-rw-r--r-- 1 root root 172M 5月  12 22:38 test.tar

4.数据卷恢复

[root@localhost ~]# docker run -itd --name mysql_back -v mysqltest:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 mysql
246f59e233116c3b0e8a8d041f3ca7b4b5096ca170ebb0e2fac586236c92d4b7
   //启动新容器mysql_back,将空数据卷mysqlback挂载至容器的/var/lib/mysql目录
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
246f59e23311        mysql               "docker-entrypoint.s…"   4 seconds ago       Up 3 seconds        3306/tcp, 33060/tcp   mysql_back
[root@localhost ~]# docker volume ls
DRIVER              VOLUME NAME
local               mysql
local               mysqlback
[root@localhost ~]# docker run -it --volumes-from mysql_back -v /root/test:/backup mysql tar xvf /backup/test.tar -C /var/lib/mysql
var/lib/mysql/
var/lib/mysql/ibdata1
var/lib/mysql/ib_logfile1
var/lib/mysql/#ib_16384_0.dblwr
var/lib/mysql/#ib_16384_1.dblwr
var/lib/mysql/undo_001
var/lib/mysql/undo_002
var/lib/mysql/ib_logfile0
var/lib/mysql/#innodb_temp/
var/lib/mysql/#innodb_temp/temp_1.ibt
var/lib/mysql/#innodb_temp/temp_2.ibt
var/lib/mysql/#innodb_temp/temp_3.ibt
var/lib/mysql/#innodb_temp/temp_4.ibt
var/lib/mysql/#innodb_temp/temp_5.ibt
var/lib/mysql/#innodb_temp/temp_6.ibt
var/lib/mysql/#innodb_temp/temp_7.ibt
var/lib/mysql/#innodb_temp/temp_8.ibt
var/lib/mysql/#innodb_temp/temp_9.ibt
...
var/lib/mysql/test/        ------》可以看到恢复的时候有test库
var/lib/mysql/binlog.000003
var/lib/mysql/binlog.000004
var/lib/mysql/binlog.000005
var/lib/mysql/binlog.000006
var/lib/mysql/ib_buffer_pool
var/lib/mysql/ibtmp1
var/lib/mysql/binlog.000007
var/lib/mysql/binlog.index
[root@localhost test]# docker exec -it mysql_back /bin/bash
root@2ffefb7516b9:/# mysql -uroot -p123
    //查看新容器mysql_back进行数据卷恢复后数据库中的数据
...
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |     ----》数据库中无test库????
+--------------------+
4 rows in set (0.07 sec)
root@8fff18326739:/# ls /var/lib/mysql/
'#ib_16384_0.dblwr'   auto.cnf        ca.pem            ib_logfile1   performance_schema   sys
'#ib_16384_1.dblwr'   binlog.000001   client-cert.pem   ibdata1       private_key.pem      test
'#innodb_temp'        binlog.000002   client-key.pem    ibtmp1        public_key.pem       undo_001
 509ca1ee2a1b.err     binlog.index    ib_buffer_pool    mysql         server-cert.pem      undo_002
 8fff18326739.err     ca-key.pem      ib_logfile0       mysql.ibd     server-key.pem       var


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
1天前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
5天前
|
运维 持续交付 虚拟化
深入解析Docker容器化技术的核心原理
深入解析Docker容器化技术的核心原理
22 1
|
7天前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
7天前
|
JavaScript 开发者 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
7天前
|
持续交付 开发者 Docker
Docker容器化技术实战指南
Docker容器化技术实战指南
23 1
|
7天前
|
安全 Docker 微服务
深入理解Docker容器技术:从基础到实践
深入理解Docker容器技术:从基础到实践
|
4天前
|
存储 运维 数据中心
使用Docker容器化应用程序的优势与挑战
使用Docker容器化应用程序的优势与挑战
9 0
|
6天前
|
Java Docker 微服务
利用Docker容器化部署Spring Boot应用
利用Docker容器化部署Spring Boot应用
29 0
|
10天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
41 2
下一篇
无影云桌面