【问题标题】:Backup Azure SQL DB during VSTS Release在 VSTS 发布期间备份 Azure SQL DB
【发布时间】:2017-04-17 10:34:16
【问题描述】:

我正在探索 VSTS 发布管理,我想在应用任何迁移脚本之前备份托管在 Azure SQL DB 上的生产数据库。我找不到任何特定任务或等待 Azure SQL DB 完全备份的首选方式,因此只有在正确备份数据库后才能继续部署。 我已经研究过使用 PowerShell 任务或 Azure SQL CMD 任务,但我不确定如何让其余任务等待备份完成。 如果有人能指出我正确的方向,将不胜感激。谢谢。

【问题讨论】:

  • 我不相信有标准任务或任何接近它的东西。不过,这应该可以帮助您入门。您必须循环查询目标副本的状态:mssqltips.com/sqlservertip/2235/…

标签: azure-sql-database database-backups azure-powershell azure-pipelines azure-pipelines-release-pipeline


【解决方案1】:

您可以备份 Azure SQL 数据库并循环检查状态。

$exportRequest = New-AzureRmSqlDatabaseExport -ResourceGroupName $ResourceGroupName -ServerName $ServerName `
   -DatabaseName $DatabaseName -StorageKeytype $StorageKeytype -StorageKey $StorageKey -StorageUri $BacpacUri `
   -AdministratorLogin $creds.UserName -AdministratorLoginPassword $creds.Password

$importStatus = Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink
[Console]::Write("Exporting")
while ($importStatus.Status -eq "InProgress")
{
    $importStatus = Get-AzureRmSqlDatabaseImportExportStatus -OperationStatusLink $importRequest.OperationStatusLink
    [Console]::Write(".")
    Start-Sleep -s 10
}
[Console]::WriteLine("")
$importStatus

更多信息,可以参考Export an Azure SQL database to a BACPAC file

另一种方法是,您可以通过 PowerShell 调用 Microsoft.SqlServer.Dac.DacServices.ExportBacpac 方法来备份 Azure SQL 数据库。

param([string]$ConnectionString, [string]$DatabaseName,[string]$OutputFile,[string]$s)
Add-Type -Path "$s\AzureDatabaseSolution\SQLDatabase\lib\Microsoft.SqlServer.Dac.dll"
$now = $(Get-Date).ToString("HH:mm:ss")
$Services = new-object Microsoft.SqlServer.Dac.DacServices $ConnectionString
Write-Host "Starting at $now"  
$Watch = New-Object System.Diagnostics.StopWatch
$Watch.Start()
$Services.ExportBacpac($OutputFile, $DatabaseName)
$Watch.Stop()
Write-Host "Backup completed in" $Watch.Elapsed.ToString()  

注意:使用此包中的程序集:Microsoft.SqlServer.Dac 1.0.3(我将其添加到源代码管理并映射到构建代理)

另一方面,要添加防火墙规则,你可以参考这个帖子:Deploy Dacpac packages via power shell script to Azure SQL Server

顺便说一句,您可以使用这些 PowerShell 脚本构建自定义构建/发布步骤/任务。 Add a build task

【讨论】:

  • 谢谢,这似乎是一个不错的选择。将尝试并报告。
  • 还没有,我在您链接时查看了创建自定义构建任务,但我不太熟悉 PowerShell 以及如何编写扩展程序以便它也安装 Azure Powershell sdk。我查看了 Git 中现有的 VS Build 扩展,但它们似乎使用了相当多的内部 Powershell 库,没有什么直接的。所以现在我正在尝试使用 Azure CLI,我让 CLI 脚本在本地工作。但是当我在内联 Azure CLI 任务中使用相同的脚本时,它会给出“##[error]Unhandled: Failed which: Not found az: null”错误!
  • 我确实看到我可以在我的源代码管理中上传一个 powershell 或 CLI 脚本,然后通过 Release PowerShell 任务调用它。但是,在我的源代码控制中包含发布脚本并且必须随着发布平台的变化而对源代码控制进行新的推送,这感觉不对。应该有一种独立的方式来上传和管理我的发布脚本,而不是将其与我的源代码捆绑在一起。我认为目前,唯一简单的选择就是走这条路。有什么想法吗?
  • @Sanddy 更好的方法是将脚本文件放在源代码管理中,您可以将其放在其他文件夹(TFVC)或其他存储库(git)中,然后将其映射或克隆到构建代理(git使用命令行任务克隆命令)。
  • 我最终不得不采用脚本方式来创建 PowerShell Release 任务并参考通过 Git 提供的脚本。链接是我的 Powershell 脚本供参考 (gist.github.com/saurabhnandu/ea474ab806d0159f1e58f82edcbea446)
【解决方案2】:

Azure SQL 数据库会持续自动备份。如果您尝试创建数据库的副本或将数据库存档到 BACPAC 文件,您可以执行任一操作。

https://docs.microsoft.com/en-us/azure/sql-database/sql-database-automated-backups https://docs.microsoft.com/en-us/azure/sql-database/sql-database-copy https://docs.microsoft.com/en-us/azure/sql-database/sql-database-export

【讨论】:

    猜你喜欢
    • 2014-06-14
    • 1970-01-01
    • 2015-01-08
    • 2021-05-12
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 2019-07-25
    • 2023-03-16
    相关资源
    最近更新 更多