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

如何在不影响现有数据库的前提下将Terraform的azurerm_sql_database迁移至azurerm_mssql_database?

不中断现有Azure数据库的前提下,迁移azurerm_sql_database到azurerm_mssql_database的方法

直接替换Terraform配置中的资源类型会触发新数据库创建,因为Terraform会将新资源类型识别为全新资源。要在保留现有数据库的前提下完成迁移,需要通过状态迁移关联新旧资源,具体步骤如下:

步骤1:添加新的azurerm_mssql_database资源配置

在现有Terraform代码中,新增与原azurerm_sql_database参数完全一致的azurerm_mssql_database资源块,注意参数严格匹配(如数据库名称、资源组、关联服务器、SKU、备份策略等)。不要删除旧的azurerm_sql_database配置。

示例:
原旧资源配置:

resource "azurerm_sql_database" "app_db" {
  name                = "app-db"
  resource_group_name = var.resource_group_name
  server_name         = azurerm_sql_server.application_sql_server.name
  sku_name            = "GP_Gen5_2"
}

新增的新资源配置:

resource "azurerm_mssql_database" "app_db" {
  name                = "app-db"
  resource_group_name = var.resource_group_name
  server_id           = azurerm_sql_server.application_sql_server.id
  sku_name            = "GP_Gen5_2"
  # 复制原数据库的其他配置参数,确保完全一致
}

步骤2:迁移Terraform状态

执行terraform state mv命令,将旧资源的跟踪状态转移到新资源上,让Terraform将新资源与现有实际数据库关联:

terraform state mv 'azurerm_sql_database.app_db' 'azurerm_mssql_database.app_db'

步骤3:验证迁移状态

运行terraform plan,检查输出结果:

  • 不应出现“创建新数据库”或“销毁旧数据库”的操作提示
  • 应显示资源配置已对齐,无需执行变更操作

步骤4:清理旧配置并确认

确认状态迁移无误后,删除代码中的azurerm_sql_database资源块,再执行terraform apply,此时Terraform仅更新本地状态,不会对实际数据库产生任何修改。

关键注意事项

  • 确保新资源的所有参数与旧资源完全匹配,避免触发不必要的资源修改
  • 操作前备份Terraform状态文件(如terraform.tfstate),防止状态丢失
  • 生产环境操作前,务必在测试环境验证整个流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:47:39