繁体   English   中英

如何备份 Azure 表和 Blob

[英]How Do I Backup Azure Tables and Blobs

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

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

您可以通过以下链接查看我如何完成这项工作的详细说明,以及我用来自动备份的批处理文件的链接: http : //www.eastfive.com/2016/03/01/automated-backup- of-azure-storage-tables-and-blob/

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

“我已经审查了您的案例,不幸的是没有办法对整个帐户或容器进行快照,因此使用 Azure 存储进行快照的唯一方法是通过 blob 迭代并应用快照,然后将快照迁移到辅助或者您可以简单地将实际文件复制到另一个帐户,但这会导致更高的延迟和更高的存储容量成本,其中快照占用的空间更少,传输速度更快。
我们支持的传输方法是 AzCopy 和数据移动库,可用于在 Java 或 C# 中制作自定义迁移解决方案。
如果你想自动化这些流程,那么你可以通过 Powershell 和 Azure 自动化或 Azure Functions 来实现,但可能需要通过另一个支持请求来提供对这些解决方案的帮助,因为我的团队纯粹支持 Azure 存储。”

因此,仍然不存在进行这些备份的自动化方法。 我的团队正在开发一个用于备份的库。 当我们完成后,我会在这里发布。

2018 年 5 月 8 日更新此答案:如前所述,我的团队一直在开发一个库来自动备份。 您可以在此处找到该项目: https : //github.com/eastfivellc/EastFive.Azure.Storage.Backup 请随时做出贡献。

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

我们写了一个 . NET 库,用于备份表和 blob。 您可以在 azure 函数定时器触发器中轻松实现这一点。

在这篇博客中,我解释了如何使用 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");
}

您还可以使用 3rd 方工具,如Cerebrata Azure 管理 Cmdlets或 Microsoft Azure 存储团队宣布的异步复制 Blob功能,这基本上允许您将数据从一个存储帐户复制到另一个存储帐户,而无需在本地下载数据。

检查线程以获取更多信息: 备份 Azure Blob 存储内容的最佳方法是什么

希望这可以帮助。

查看Microsoft Azure 存储数据移动库

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

我们在触发的 webjob 中运行它,它似乎对表和 blob 存储备份都表现得非常好。

如果你还在寻找这个问题的解决方案,请看我在 NuGet AzureTableUtilities 上发布的一个包

您可以将表复制到文件或 Blob 文件、从文件或 Blob 文件还原表以及复制到同一帐户或不同帐户上的另一个表。 也可以过滤 PartitionKey 和 Timestamp。

我还创建了一个参考命令行代码库并将其放在GitHub 上,这允许它从命令行或 Docker 容器执行。

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

您可以使用 Microsoft Azure 存储资源管理器来复制/粘贴表、上传/下载文件系统、Blob、Cosmos、数据湖等,这是其非常用户友好的工具。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM