如何使用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
- 若用时间点备份:源服务器ID、源数据库名称、指定的恢复时间点(格式遵循RFC3339,如
- 权限: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服务器IDsource_server_id/source_database_name/restore_point_in_time:三者配合用于时间点恢复,优先级低于long_term_retention_backup_idlong_term_retention_backup_id:直接指定长期保留备份的资源ID,使用此参数时无需配置时间点相关参数sku_name:恢复后的数据库SKU需与源数据库兼容,不可随意选择不匹配的SKU
4. 执行步骤
- 初始化Terraform环境:
terraform init - 预览执行计划,确认恢复配置无误:
terraform plan - 执行恢复操作(根据数据库大小,耗时可能较长):
terraform apply
内容的提问来源于stack exchange,提问作者user1842278
相关产品推荐
相关产品推荐

