Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >通过COS多版本功能快速批量恢复数据

通过COS多版本功能快速批量恢复数据

原创
作者头像
wainsun
修改于 2023-05-11 09:43:33
修改于 2023-05-11 09:43:33
89100
代码可运行
举报
运行总次数:0
代码可运行

问:线上的业务最怕什么?

答:误删除数据。

继续问:比误删除数据还可怕的是什么呢?

答:删除后无法找回!

COS对象存储有11个9的数据保障级别,但是不保障主动删除的数据,如果真是手欠清空了存储桶。那么真的是无法挽回了。

所以数据备份的事情,一定要防患于未然,提前做好高可用架构。COS产品官网上有详细的高可用架构说明文档https://cloud.tencent.com/document/product/436/37709

以上的理论内容,咱们就不详细说了。这里介绍一下,当真的手残点击了当前桶和备份桶的删除动作后,我们继续多版本的高可用架构如何可以快速的恢复我们想要的数据。

这里介绍一下快速恢复的方案。总结成一句话:遍历所有目标对象,找到第一个非删除版本的数据对象进行拷贝。

场景

  • 第一条为删除标记,第二条为最新版本数据,第三条为次新版本数据。
  • 第一条为最新版本数据。
  • 第一条为最新版本数据,第二条为次新版本是数据。
  • 第一条为删除标记,第二条为删除标记,第三条为最新版本数据,第四条为次新版本数据。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final int maxKeyNum = 400;
ListVersionsRequest listVersionsRequest = new ListVersionsRequest();
listVersionsRequest.withBucketName(srcbucket).withPrefix(keyPrefix).withMaxResults(maxKeyNum);

VersionListing versionListing = cossrcclient.listVersions(listVersionsRequest);
List < String > objectlist = new ArrayList < String > ();

int i = 0;
while (true) {
    List < COSVersionSummary > versionSummaries = versionListing.getVersionSummaries();

    for (COSVersionSummary versionInfo: versionSummaries) {
        // 对相同可key的文件list出来的顺序是版本号由近到远
        i++;

        String versionId = versionInfo.getVersionId();
        String key = versionInfo.getKey();
        long expectedLength = versionInfo.getSize();
        String expectedEtag = versionInfo.getETag();
        Boolean islatest = versionInfo.isLatest();
        Owner owner = versionInfo.getOwner();
        String getStorageClass = versionInfo.getStorageClass();
        Boolean isDeleteMarker = versionInfo.isDeleteMarker();

        System.out.println("Id:" + i); //ID
        System.out.println("versionId:" + versionId); //版本ID
        System.out.println("key:" + key); //对象全称
        System.out.println("islatest:" + islatest); //是否最新
        System.out.println("isDeleteMarker:" + isDeleteMarker); //是否有删除标记
        System.out.println("expectedLength:" + expectedLength); //对象大小
        System.out.println("expectedEtag:" + expectedEtag); //Etag值
        System.out.println("Owner:" + owner.getId() + ":" + owner.getDisplayName()); //资源拥有者ID和名称
        System.out.println("getStorageClass:" + getStorageClass); //对象类型

        if (isDeleteMarker == false) //标记不是删除标记的记录
        {
            if (islatest == true) //标记是最新的记录
            {
                System.out.println("最新版文件,拷贝" + "key:" + key + ",version:" + versionId);
                copyObjectRequest(cosdstclient, srcappid, srcbucket, key, versionId, dstbucket, key);
                objectlist.add(key);
            } else {
                if (!copiedobject(key, objectlist)) {
                    System.out.println("次新文件,拷贝" + "key:" + key + ",version:" + versionId);
                    copyObjectRequest(cosdstclient, srcappid, srcbucket, key, versionId, dstbucket, key);
                    objectlist.add(key);
                }

            }
        }
    }
    if (!versionListing.isTruncated()) {

        break;
    }
    versionListing = cossrcclient.listNextBatchOfVersions(versionListing); //列出下一批版本
    System.out.println("--------------------------------------");
}

这个方法的作用是,while每次400条遍历所有的目标对象。

1.当有DeleteMarker标记时则跳过操作。

2.当islastest为true时,说明这是一个最新版本的数据对象。则进行复制操作。

3.当既不是deletemarker标签,也不是islastest最新版时。我们会找到第一个数据对象,作为筛选后的最新版实体数据,进行复制。

4.复制操作完成后,对象名称加入objectlist,避免再次被覆盖,也就是说,每一个对象,最多只会操作一次复制。

通过这个逻辑,我们只要找到第一个有实体数据的对象,做复制操作,就可以实现所有最新版的复制功能,实现批量的数据恢复

以下是已复制的object列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static Boolean copiedobject(String object, List < String > objectlist) {
    for (int i = 0; i < objectlist.size(); i++) {
        //System.out.println("object:"+object);
        //System.out.println("objectlist.get(i):"+objectlist.get(i));
        if (object.equals(objectlist.get(i))) {
            return true;
        }
    }
    return false;
}

测试一下,我们做了一份桶的数据清单,如下

备份桶文件列表

这里模拟各种删除场景,之后执行批量恢复脚本,执行结果如下

脚本执行结果

完成后在目标桶查看

目标桶恢复的对象列表

验证成功。

java脚本文件:https://wainsun-1253985742.cos.ap-beijing.myqcloud.com/%E8%84%9A%E6%9C%AC%E6%96%87%E4%BB%B6/DisasterRecovery.rar

python脚本链接:https://github.com/shezhangjun/TencentCOS/tree/master/Python_SDK/COS_Disaster_Recovery

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
通过COS多版本功能快速批量恢复数据
问:线上的业务最怕什么? 答:丢数据。 继续问:比丢数据还可怕的是什么呢? 答:丢的干干净净,还无法找回! COS对象存储有11个9的数据保障级别,但是不
wainsun
2020/03/31
1.5K0
通过COS多版本功能快速批量恢复数据
利用COS多版本避免文件误删除
腾讯云COS对象存储在实际使用中,提供了高达 99.999999999% 的数据存储安全SLA。但是,依然避免不了客户端发起的误删除操作。
wainsun
2020/03/13
6920
利用COS多版本避免文件误删除
数据误删?别怕!COS防误删和误删恢复攻略请查收
在云存储领域,数据的安全性始终是悬在头顶的达摩克利斯之剑。长期以来,腾讯云对象存储服务(COS)一直致力于数据安全的探索和实践,以保障数据的安全性和完整性。对象存储COS准备了一份“防误删”和“误删恢复”攻略给大家,本文将深入介绍这两部分。
云存储
2024/06/03
3920
数据误删?别怕!COS防误删和误删恢复攻略请查收
腾讯COS存储的使用
对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,用户可通过网络随时存储和查看数据。腾讯云 COS 使所有用户都能使用具备高扩展性、低成本、可靠和安全的数据存储服务。
ha_lydms
2023/08/09
1.5K0
腾讯COS存储的使用
activiti(六)排他网关ExclusiveGateWay
由排他网关流出的顺序流都有个conditionExpression元素,在内部维护返回boolean类型的决策结果。
周杰伦本人
2023/10/12
4180
activiti(六)排他网关ExclusiveGateWay
MySQL - 多版本控制 MVCC 机制初探
MySQL InnoDB 存储引擎,实现的是基于多版本的并发控制协议——MVCC,而不是基于锁的并发控制。
小小工匠
2021/08/17
9940
对象存储COS访问日志场景体验
COS访问日志记录了用户对COS资源的访问信息,包括上传对象(PUT),删除对象(DELETE),访问对象(GET)等。通过分析访问日志,用户可以完成审计回溯,如删除资源记录,同时也可以完成资源热门相关的资源统计等能力。本次我们就介绍下COS访问日志常见玩法。
日志服务CLS小助手
2021/11/29
8870
使用腾讯云 COS 官方工具快速将本地数据迁移至 COS
腾讯云 COS 提供了多种同步迁移工具,如 COSCMD、COS Migration 和 COSBrowser 客户端等。
沈唁
2022/11/14
2.8K0
Android:SQLiteOpenHelper类(SQLlite数据库操作)详细解析
当我们完成了对数据库的操作后,记得调用SQLiteDatabase的close()方法释放数据库连接,否则容易出现SQLiteException。
Carson.Ho
2019/02/22
31.3K3
COS JavaSDK V4升级到V5版本
如果您细心对比过 JSON Java SDK 和 XML Java SDK 的文档,您会发现并不是一个简单的增量更新。XML Java SDK 在架构、可用性和安全性上有了非常大的提升,而且在易用性、健壮性和性能上也做了非常大的改进。如果您想要升级到 XML Java SDK,请参考下面的指引,完成 Java SDK 的升级工作。
卓恒
2020/12/29
1.9K0
使用腾讯云COS官方工具快速将本地数据迁移至COS
腾讯云COS提供了多种同步迁移工具,如COSCMD、COS Migration和COSBrowser客户端等
沈唁
2020/06/12
3.7K0
使用腾讯云COS官方工具快速将本地数据迁移至COS
Java集合容器面试题(2020最新版)
Java面试总结汇总,整理了包括Java基础知识,集合容器,并发编程,JVM,常用开源框架Spring,MyBatis,数据库,中间件等,包含了作为一个Java工程师在面试中需要用到或者可能用到的绝大部分知识。欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。文章持续更新中…
Java架构师必看
2020/04/10
1.3K0
工作流引擎之activiti流程定义
ProcessDefinition(流程定义)就是一个流程的步骤说明,比如我们接下来要说的这个流程,申请人王三发起提交申请,李四作为部门经理进行审批,审批完成后,此申请到达下一级总经理王五,进行审批。就这么整个流程说明其实就是流程定义,不过在Activiti中整个流程定义是以xxx.bpmn与xxx.png格式存在的。
lyb-geek
2018/07/26
1.5K0
对象存储 Node.js SDK cos-nodejs-sdk-v5 Typescript 声明文件
用到腾讯云对象存储,使用Node.js SDK cos-nodejs-sdk-v5,没有 typescript 的声明文件,自己写了一个。
苦少
2020/05/11
2K0
Java基础知识面试题(2020最新版)
Java面试总结汇总,整理了包括Java基础知识,集合容器,并发编程,JVM,常用开源框架Spring,MyBatis,数据库,中间件等,包含了作为一个Java工程师在面试中需要用到或者可能用到的绝大部分知识。欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。文章持续更新中…
Java架构师必看
2020/04/10
1K0
云存储攻防之Bucket文件覆盖
版本控制用于实现在相同存储桶中存放同一对象的多个版本,例如:在一个存储桶中您可以存放多个对象键同为picture.jpg的对象,但其版本ID不同,例如:1000、1001和1002等,用户在为某一存储桶开启版本控制功能后,可以根据版本ID查询、删除或还原存放在存储桶中的对象,这有助于恢复被用户误删或应用程序故障而丢失的数据,例如:用户在对版本控制的对象进行删除操作时:
Al1ex
2023/08/10
6350
云存储攻防之Bucket文件覆盖
使用腾讯云 COS 官方工具快速将本地数据迁移至 COS
本文主要介绍如何使用 COS 迁移工具将本地数据迁移至 COS,同时带来最新的生态活动,快来看看吧~ 腾讯云 COS 提供了多种同步迁移工具,如 COSCMD、COS Migration 和 COSBrowser 客户端等。 COS 提供的工具还都支持 Windows、Linux 和 macOS 系统,所以我们可以根据不同的环境可以选择适合的迁移工具。如果想操作图形界面,可以使用COSBrowser(https://cloud.tencent.com/document/product/436/11366)。
云存储
2022/08/26
1.8K0
使用腾讯云 COS 官方工具快速将本地数据迁移至 COS
国产最强权限管理,没有之一,不接受任何反驳!
引言 在使用 COS 的过程中,你一定遇到过这些问题:如何限制用户访问 ip ?如何限制上传文件大小?如何只允许使用了 https 协议的请求通过?如何只允许列出指定目录下的对象? 以上这些问题,通通可以使用一把最强武器全面解决! Policy Condition ——在设置权限策略时指定生效条件,限制用户请求只有在指定条件下才能通过。COS 目前已支持11个条件键,是国内目前支持条件键数量最多、最丰富的对象存储产品。未来,我们还会继续增加对更多条件键的支持,打造国产最强权限管理。 背景知识:什么是 Pol
云存储
2022/03/24
7930
基于清单分析对象存储容量使用
不同于文件系统,对象存储是一个扁平的架构,在海量数据的场景下统计某个目录(对象前缀)下所有文件的大小是一个非常难的操作,只能列出该目录下所有文件,然后将所有文件大小相加的方式获取总大小。根据客户的实际反馈,在文件数目非常大的情况下,这种方式不是特别友好,耗时非常久,还需要长期占有主机端资源做list object以及统计容量操作。
HuiG
2022/05/18
1.1K0
使用 COSCLI 快速迁移本地数据到 COS
在 GitHub 或者 Gitee 等其他地方“白嫖“存储难免会遇到无法访问的时候,例如前段时间 jsDelivr 就因为被 DNS 污染导致无法访问、Gitee 公开仓库私有...
沈唁
2022/08/07
1.4K0
相关推荐
通过COS多版本功能快速批量恢复数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验