You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Terraform在另一台Azure服务器上恢复SQL数据库?

用Terraform跨服务器恢复Azure SQL数据库(RestoreExternalBackup模式)

核心说明

RestoreExternalBackup是Azure SQL数据库Terraform资源(azurerm_mssql_database)的一种创建模式,专门用于将另一台Azure SQL服务器上的数据库备份(含时间点备份、长期保留备份)恢复到目标服务器。


1. 准备前置信息

在编写配置前,需确认以下信息:

  • 目标Azure SQL服务器的资源ID(或关联的资源组名、服务器名)
  • 源备份相关信息:
    • 若用时间点备份:源服务器ID、源数据库名称、指定的恢复时间点(格式遵循RFC3339,如2024-05-20T10:00:00Z)
    • 若用长期保留备份:对应的长期保留备份资源ID
  • 权限:Terraform使用的服务主体需拥有源服务器的读取权限、目标服务器的数据库创建权限

2. Terraform配置示例

示例1:从时间点备份恢复

此示例将源服务器的指定数据库,按某一时间点恢复到目标服务器:

# 引用已存在的目标SQL服务器
data "azurerm_mssql_server" "target_server" {
  name                = "target-sql-server"
  resource_group_name = "target-rg"
}

# 引用已存在的源SQL服务器
data "azurerm_mssql_server" "source_server" {
  name                = "source-sql-server"
  resource_group_name = "source-rg"
}

resource "azurerm_mssql_database" "restored_db" {
  name                = "Restored-DemoDB"
  server_id           = data.azurerm_mssql_server.target_server.id
  sku_name            = "GP_Gen5_2" # 需与源数据库SKU兼容
  create_mode         = "RestoreExternalBackup"

  # 时间点恢复必填参数
  source_server_id     = data.azurerm_mssql_server.source_server.id
  source_database_name = "Source-DemoDB"
  restore_point_in_time= "2024-05-20T10:00:00Z"
}

示例2:从长期保留备份恢复

若使用预先配置的长期保留备份恢复,直接指定备份ID即可:

# 引用已存在的目标SQL服务器
data "azurerm_mssql_server" "target_server" {
  name                = "target-sql-server"
  resource_group_name = "target-rg"
}

resource "azurerm_mssql_database" "restored_ltr_db" {
  name                = "Restored-LTR-DemoDB"
  server_id           = data.azurerm_mssql_server.target_server.id
  sku_name            = "GP_Gen5_2"
  create_mode         = "RestoreExternalBackup"

  # 长期保留备份恢复必填参数
  long_term_retention_backup_id = "/subscriptions/xxx-xxx-xxx/resourceGroups/source-rg/providers/Microsoft.Sql/servers/source-server/databases/Source-DemoDB/longTermRetentionBackups/backup-xxxxxx"
}

3. 关键参数说明

  • create_mode = "RestoreExternalBackup":必须设置此值触发跨服务器恢复逻辑
  • server_id:指定恢复后数据库归属的目标SQL服务器ID
  • source_server_id/source_database_name/restore_point_in_time:三者配合用于时间点恢复,优先级低于long_term_retention_backup_id
  • long_term_retention_backup_id:直接指定长期保留备份的资源ID,使用此参数时无需配置时间点相关参数
  • sku_name:恢复后的数据库SKU需与源数据库兼容,不可随意选择不匹配的SKU

4. 执行步骤

  1. 初始化Terraform环境:
    terraform init
    
  2. 预览执行计划,确认恢复配置无误:
    terraform plan
    
  3. 执行恢复操作(根据数据库大小,耗时可能较长):
    terraform apply
    

内容的提问来源于stack exchange,提问作者user1842278

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:57:25