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

如何用Terraform为Azure SQL的azurerm_mssql_database添加只读副本?配置未生效

解决Terraform中azurerm_mssql_database只读副本未创建的问题

首先明确:read_replica_count参数仅对弹性池中的数据库生效,独立部署的数据库无法通过该参数自动创建只读副本,需单独配置。以下是具体排查和解决步骤:

1. 确认数据库是否归属弹性池

如果你的数据库未关联弹性池,read_replica_count参数不会触发只读副本创建。必须为azurerm_mssql_database配置elastic_pool_id,指向已存在的弹性池资源。示例配置:

resource "azurerm_mssql_server" "main" {
  name                         = "main-sql-server"
  resource_group_name          = azurerm_resource_group.main.name
  location                     = azurerm_resource_group.main.location
  version                      = "12.0"
  administrator_login          = "sqladmin"
  administrator_login_password = "ComplexPass123!"
}

resource "azurerm_mssql_elastic_pool" "main" {
  name                = "main-elastic-pool"
  resource_group_name = azurerm_resource_group.main.name
  location            = azurerm_resource_group.main.location
  server_id           = azurerm_mssql_server.main.id
  sku_name            = "GP_Gen5_2" # 需使用支持只读副本的SKU
}

resource "azurerm_mssql_database" "main" {
  name              = "main-db"
  server_id         = azurerm_mssql_server.main.id
  elastic_pool_id   = azurerm_mssql_elastic_pool.main.id
  read_replica_count = 1
}

2. 检查弹性池SKU兼容性

基础版(Basic)弹性池不支持只读副本功能,必须使用支持异地复制的SKU,例如:

  • 常规用途(GP)系列:GP_Gen5_*、GP_Gen8_*
  • 业务关键(BC)系列:BC_Gen5_*、BC_Gen8_*

若使用不兼容的SKU,read_replica_count参数会被忽略,无报错但不会创建副本。

3. 独立数据库的只读副本创建方式

如果数据库是独立部署(未加入弹性池),需通过azurerm_mssql_database_replica资源手动创建只读副本。示例配置:

# 主SQL服务器及数据库
resource "azurerm_mssql_server" "primary" {
  name                         = "primary-sql-server"
  resource_group_name          = azurerm_resource_group.primary.name
  location                     = azurerm_resource_group.primary.location
  version                      = "12.0"
  administrator_login          = "sqladmin"
  administrator_login_password = "ComplexPass123!"
}

resource "azurerm_mssql_database" "primary" {
  name      = "primary-db"
  server_id = azurerm_mssql_server.primary.id
  sku_name  = "GP_Gen5_2"
}

# 只读副本所在的SQL服务器
resource "azurerm_mssql_server" "secondary" {
  name                         = "secondary-sql-server"
  resource_group_name          = azurerm_resource_group.secondary.name
  location                     = azurerm_resource_group.secondary.location
  version                      = "12.0"
  administrator_login          = "sqladmin"
  administrator_login_password = "ComplexPass123!"
}

# 创建只读副本
resource "azurerm_mssql_database_replica" "secondary" {
  name               = "secondary-db"
  server_id          = azurerm_mssql_server.secondary.id
  source_database_id = azurerm_mssql_database.primary.id
  read_scale         = true # 启用只读路由
}

4. 验证部署状态

执行terraform apply后,查看部署日志是否存在权限不足、SKU不兼容等错误提示。同时运行terraform state list,检查是否有对应的副本资源(弹性池场景下副本会自动关联主库,独立场景下需看到azurerm_mssql_database_replica条目)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:27:48