如何备份Azure表和Blob

时间:2016-03-07 04:03:01

标签: azure azure-storage azure-storage-blobs

我将数据存储在Azure存储表和blob存储中。我想自动备份我的数据,以防止用户意外数据损坏或软件问题。微软并没有一个很好的解决方案,虽然有自动备份的付费解决方案,但似乎应该有一种直接的方式来备份和恢复这些数据。

6 个答案:

答案 0 :(得分:7)

在对自动备份数据的最佳方法进行了大量研究之后,我发现最简单的方法是在使用AZCopy的Azure虚拟机上的Windows任务计划程序中安排作业。 AZCopy负责将表数据移动到VM,然后返回到Azure中的辅助Blob存储来保存备份。批处理文件还会使AZCopy直接将源存储帐户中的blob复制到目标帐户。

您可以在此链接中看到有关我如何完成此工作的详细说明,其中包含指向我用于自动备份的批处理文件的链接: http://www.eastfive.com/2016/03/01/automated-backup-of-azure-storage-tables-and-blobs/

02/08/2018更新此答案: 我在2018年1月18日向Azure支持提出了这个问题,假设他们现在有办法通过Azure中的服务来实现这一点。不幸的是情况并非如此,并且(根据Microsoft支持)没有比首次提出此问题时存在的表备份更好的方法。这是来自01/24/2018的支持的答案:

  

"我已经审查过您的案例,遗憾的是没有办法   做一个整个帐户或容器的快照,所以唯一的方法   使用Azure存储执行快照是通过blob迭代和   应用快照,然后将快照迁移到辅助节点   帐户。或者您只需将实际文件复制到另一个帐户即可   但这会有更高的延迟,并且存储成本更高   容量,快照占用更少,速度更快   转让。
  我们支持转移的方法是AzCopy和   数据移动库,可用于进行自定义迁移   Java或C#中的解决方案   如果您想自动化这些过程   然后你可以通过Powershell和Azure自动化或用   Azure功能但可能需要这些解决方案的帮助   作为我的团队纯粹通过另一个支持请求提出   支持Azure存储。"

因此,仍然没有自动方式来执行这些备份。我的团队正在开发一个库来进行备份。当我们完成后,我将在此回复。

05/08/2018更新此答案: 如上所述,我的团队一直致力于一个库来自动备份。你可以在这里找到这个项目: https://github.com/eastfivellc/EastFive.Azure.Storage.Backup。请随时贡献。

10/18/2018更新此答案: 我能够使用Azure数据工厂功能在Azure中复制数据。我使用Data Factory将来自源的数据传输到表和blob的目标存储。但是,数据移动成本过高(每个备份数百美元)。因此,这不是备份的解决方案。正如我在上面的帖子中所提到的(以及下面的答案),Azure数据移动库是这里的最佳解决方案。

答案 1 :(得分:2)

我们写了一个。NET library来备份表和Blob。您可以在azure函数计时器触发器中轻松实现此功能。

在此blog中,我解释了如何使用Azure函数来实现它。

[FunctionName("Function1")]
public static async Task Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log, ExecutionContext context)
{
  var sourceAccountName = Environment.GetEnvironmentVariable("BackupSourceAccountName");
  var sourceKey = Environment.GetEnvironmentVariable("BackupSourceAccountKey");

  var backupAzureStorage = new Luminis.AzureStorageBackup.BackupAzureStorage(sourceAccountName, sourceKey, log, context.FunctionAppDirectory);

  var destinationAccountName = Environment.GetEnvironmentVariable("BackupDestinationAccountName");
  var destinationKey = Environment.GetEnvironmentVariable("BackupDestinationAccountKey");
  var destinationContainerName = Environment.GetEnvironmentVariable("BackupDestinationContainer");

  // Backup Tables
  await backupAzureStorage.BackupAzureTablesToBlobStorage("table1,table2", destinationAccountName, destinationKey, destinationContainerName, "tables");

  // Backup Blobs
  await backupAzureStorage.BackupBlobStorage("container1,container2", destinationAccountName, destinationKey, destinationContainerName, "blobs");
}

答案 2 :(得分:1)

您还可以使用第三方工具,例如Cerebrata Azure Management Cmdlets或Microsoft Azure存储团队宣布的功能Asynchronous Copy Blob,这些工具基本上允许您将数据从一个存储帐户复制到另一个存储帐户,而无需下载数据本地。

检查主题:What is the best way to backup Azure Blob Storage contents

希望这有帮助。

答案 3 :(得分:1)

看看Microsoft Azure Storage Data Movement Library

这似乎提供了AzCopy的大多数功能,但是在nuget包中,因此您几乎可以在任何喜欢的地方使用它。

我们正在触发的Web作业中运行此文件,对于表和Blob存储备份,这似乎都表现得非常好。

答案 4 :(得分:0)

如果您仍在寻找解决方案,请查看我在NuGet AzureTableUtilities上发布的软件包

您可以将表复制到文件或blob文件,从文件或blob文件还原表,以及复制到同一帐户或不同帐户上的另一个表。还可以对PartitionKey和Timestamp进行过滤。

我还创建了参考命令行代码库,并将其放在GitHub上,从而可以从命令行或Docker容器执行该代码。

让我知道这是否与您想要的不完全相同,我将看看是否可以增强功能。我意识到该工具本身不会“自动”备份Azure Tables数据。但是,使用直接在Windows下或Docker容器中的命令行示例,我认为您可以设置想要备份的任何进程。

答案 5 :(得分:-1)

您可以使用Microsoft Azure存储资源管理器来复制/粘贴表,上传/下载文件系统,Blob,Cosmos,Data Lake等,这是非常易于使用的工具。

下载链接:https://azure.microsoft.com/en-in/features/storage-explorer/