备份Azure Blob存储内容的最佳方法是什么

备份Azure Blob存储内容的最佳方法是什么,azure,backup,azure-storage,azure-storage-blobs,Azure,Backup,Azure Storage,Azure Storage Blobs,我知道Azure存储实体(Blob、表和队列)具有内置的弹性,这意味着它们被复制到同一数据中心的3个不同服务器上。除此之外,还可以将它们复制到物理上位于不同地理区域的不同数据中心。在这种情况下,丢失数据的可能性几乎为零 但是,如果草率的开发人员(或受酒精影响的开发人员:)通过Azure门户或Azure storage Explorer工具意外删除存储帐户,会发生什么情况?最糟糕的是,如果黑客获得了你的帐户并清除了存储空间怎么办?有没有一种方法可以检索千兆字节的已删除blob,还是这样?不知何故,

我知道Azure存储实体(Blob、表和队列)具有内置的弹性,这意味着它们被复制到同一数据中心的3个不同服务器上。除此之外,还可以将它们复制到物理上位于不同地理区域的不同数据中心。在这种情况下,丢失数据的可能性几乎为零

但是,如果草率的开发人员(或受酒精影响的开发人员:)通过Azure门户或Azure storage Explorer工具意外删除存储帐户,会发生什么情况?最糟糕的是,如果黑客获得了你的帐户并清除了存储空间怎么办?有没有一种方法可以检索千兆字节的已删除blob,还是这样?不知何故,我认为Azure infrastructure必须提供一个优雅的解决方案,但我找不到任何文档

我能想到的唯一解决方案是编写自己的进程(工作角色),定期将整个存储备份到不同的订阅/帐户,从而使存储和事务的成本增加一倍。 有什么想法吗

问候,


归档取决于您要备份数据的位置,有两个可用选项:

  • 本地备份数据—如果您希望在基础架构中本地备份数据,您可以: A.使用存储客户端库或使用REST API或 B使用第三方工具,如(披露:我为大脑数据工作)

  • 在云中备份数据—最近,Windows Azure存储团队宣布了异步复制Blob功能,该功能基本上允许您将数据从一个存储帐户复制到另一个存储帐户,而无需在本地下载数据。这里的问题是,您的目标存储帐户应在2012年6月7日之后创建。您可以在Windows Azure博客上阅读有关此功能的更多信息:


  • 希望这能有所帮助。

    被接受的答案很好,但我花了几个小时才破译了所有内容

    我已经准备好了我现在在生产中使用的解决方案。我每天(午夜)通过
    webapi
    公开方法
    Backup()
    ,然后由
    azurewebjob
    调用

    请注意,我采用了原始源代码,并对其进行了修改:

    • 它不是最新的,所以我更改了几个方法名
    • 添加了重试复制操作保护(对同一blob尝试4次后失败)
    • 添加了一点日志记录-您应该用自己的日志记录替换它
    • 在两个存储帐户(复制容器和Blob)之间执行备份
    • 添加了清除功能—它可以清除不需要的旧容器(保留16天的数据)。您可以随时禁用此功能,因为空间很便宜
    可从以下位置找到来源:

    这就是我在控制器中使用它的方式(请注意,您的控制器应该只能由azure webjob调用-您可以在标题中检查凭据):

    [路由(“备份”)]
    [HttpPost]
    公共异步任务备份()
    {
    尝试
    {
    wait_blobService.Backup();
    返回Ok();
    }
    捕获(例外e)
    {
    _loggerService.Error(“备份Blob失败”+e);
    返回InternalServerError(新异常(“备份Blob失败!”);
    }
    }
    

    注意:我想把这段代码作为文章的一部分添加进去,但是我浪费了6分钟试图把这段代码放到这篇文章中,但是失败了。格式化根本不起作用,它完全崩溃了。

    您可以制作博客容器的快照,然后下载快照进行时间点备份

    快照是一个只读版本的blob,它是在中的某个点上拍摄的 时间快照对于备份blob很有用。创建一个 快照,您可以读取、复制或删除它,但不能修改它+ blob的快照与其基本blob相同,只是 blob URI在blob URI后附加了一个日期时间值,以指示 拍摄快照的时间。例如,如果一个页面blob URI 就是 快照URI类似于


    在不参考第三方解决方案的情况下,您可以通过以下步骤实现在Azure中使用内置功能可能有助于保护您的blob

  • Azure存储Blob的软删除 更好的步骤是首先启用软删除,该操作现在处于GA中:

  • 读取访问地理冗余存储 第二种方法是为RA-RGA启用地理复制,因此,如果第一个数据中心关闭,您始终可以从另一个区域的辅助副本中读取数据,您可以在此处找到更多信息:


  • 我使用了Azure Data Factory来备份Azure存储,效果非常好。它真的很容易使用,成本效益和工作非常好

    只需创建一个数据工厂(v2),设置到数据源的数据连接(它当前支持Azure表、Azure Blob和Azure文件),然后设置数据复制管道

    管道可以合并、覆盖等,您可以设置自定义规则/通配符

    一旦设置了管道,就应该设置一个调度触发器。这将在一段时间内启动备份,以满足您的需要


    我已经用了好几个月了,很完美。无代码、无虚拟机、无自定义PowerShell脚本或第三方软件。纯Azure解决方案。

    我有完全相同的要求:从Azure备份Blob,因为我们有数百万Blob的客户,你是对的-一个拥有完全访问权限的草率开发人员可能会危害整个系统

    因此,我在github上根据MIT许可证编写了一个完整的免费开源应用程序“Blob到本地备份”:

    它解决了您的许多问题,即: a) 您只能授予此应用程序的读取权限,以便该应用程序无法销毁Azure上的任何数据
    [Route("backup")]
    [HttpPost]
    public async Task<IHttpActionResult> Backup()
    {
        try
        {
            await _blobService.Backup();
            return Ok();
        }
        catch (Exception e)
        {
            _loggerService.Error("Failed to backup blobs " + e);
            return InternalServerError(new Exception("Failed to back up blobs!"));
        }
    }
    
        {
         "App": {
    
            "ConsoleWidth": 150,
            "ConsoleHeight":  42,
    
            "LoginCredentials": {
                "ClientId": "2ab11a63-2e93-2ea3-abba-aa33714a36aa",
                "ClientSecret": "ABCe3dabb7247aDUALIPAa-anc.aacx.4",
                "TenantId": "d666aacc-1234-1234-aaaa-1234abcdef38"
            },
            "DataBase": {
              "PathToDatabases": "D:/temp/azurebackup"
            },
            "General": {
              "PathToLogFiles": "D:/temp/azurebackup"
            }
          }
        }
    
    
        {
          "Job": {
            "Name": "Job1",
            "DestinationFolder": "D:/temp/azurebackup",
            "ResumeOnRestartedJob": true,
            "NumberOfRetries": 0, 
            "NumberCopyThreads": 1,
            "KeepNumberVersions": 5,
            "DaysToKeepVersion": 0, 
            "FilenameContains": "", 
            "FilenameWithout": "", 
            "ReplaceInvalidTargetFilenameChars": false,
            "TotalDownloadSpeedMbPerSecond": 0.5,
    
            "StorageAccounts": [
              {
    
                "Name": "abc",
                "SasConnectionString": "BlobEndpoint=https://abc.blob.core.windows.net/;QueueEndpoint=https://abc.queue.core.windows.net/;FileEndpoint=https://abc.file.core.windows.net/;TableEndpoint=https://abc.table.core.windows.net/;SharedAccessSignature=sv=2019-12-12&ss=bfqt&srt=sco&sp=rl&se=2020-12-20T04:37:08Z&st=2020-12-19T20:37:08Z&spr=https&sig=abce3e399jdkjs30fjsdlkD",
                "FilenameContains": "",
                "FilenameWithout": "",
                "Containers": [
                  {
                    "Name": "test",
                    "FilenameContains": "",
                    "FilenameWithout": "",
                    "Blobs": [
                      {
                        "Filename": "2007 EasyRadiology.pdf",
                        "TargetFilename": "projects/radiology/Brochure3.pdf"
                      }
                    ]
                  },
                  {
                    "Name": "test2"
                  }
                ]
    
              },
              {
                "Name": "martintest3",
                "SasConnectionString": "",
                "Containers": [] 
              }
            ]
          }
          
        }
    
        blobtolocal job1.json