適用於 MySQL 的 Azure 資料庫 - 彈性伺服器是您用來在雲端中執行、管理及調整高可用性 MySQL 資料庫的受控服務。 您可以使用 Azure Resource Manager 範本 (ARM 範本) 來布建 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器來部署多部伺服器,或在伺服器上部署多個資料庫。
Bicep 是使用宣告式語法來部署 Azure 資源的特定領域語言 (DSL)。 其提供簡潔的語法、可靠的類型安全,並支援程式碼重複使用。 Bicep 能夠為您在 Azure 中的基礎結構即程式碼解決方案,提供最佳的製作體驗。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。
如果您沒有 Azure 訂閱,請在開始之前先建立 Azure 免費帳戶。 目前,Azure 免費帳戶可讓您免費試用「適用於 MySQL 的 Azure 資料庫 - 彈性伺服器」12 個月。 如需詳細資訊,請參閱使用 Azure 免費帳戶免費試用 適用於 MySQL 的 Azure 資料庫 - 彈性伺服器。
建立具有公用存取權的伺服器
修改下列程式代碼範例,以建立 main.bicep 檔案和 CreateFirewallRules.bicep 檔案。 使用檔案來建立具有公用存取權的 適用於 MySQL 的 Azure 資料庫 彈性伺服器,並在伺服器上建立資料庫。 您可能需要修改的 firewallRules
預設值。
main.bicep:
@description('Provide a prefix for creating resource names.')
param resourceNamePrefix string
@description('Provide the location for all the resources.')
param location string = resourceGroup().location
@description('Provide the administrator login username for the flexible server.')
param administratorLogin string
@description('Provide the administrator login password for the flexible server.')
@secure()
param administratorLoginPassword string
@description('Provide an array of firewall rules to apply to the flexible server.')
param firewallRules array = [
{
name: 'rule1'
startIPAddress: '192.168.0.1'
endIPAddress: '192.168.0.255'
}
{
name: 'rule2'
startIPAddress: '192.168.1.1'
endIPAddress: '192.168.1.255'
}
]
@description('The tier of the particular SKU. High availability mode is available only in the GeneralPurpose and MemoryOptimized SKUs.')
@allowed([
'Burstable'
'GeneralPurpose'
'MemoryOptimized'
])
param serverEdition string = 'Burstable'
@description('Server version')
@allowed([
'5.7'
'8.0.21'
])
param version string = '8.0.21'
@description('The availability zone information for the server. (If you don't have a preference, leave blank.)')
param availabilityZone string = '1'
@description('High availability mode for a server: Disabled, SameZone, or ZoneRedundant.')
@allowed([
'Disabled'
'SameZone'
'ZoneRedundant'
])
param haEnabled string = 'Disabled'
@description('The availability zone of the standby server.')
param standbyAvailabilityZone string = '2'
param storageSizeGB int = 20
param storageIops int = 360
@allowed([
'Enabled'
'Disabled'
])
param storageAutogrow string = 'Enabled'
@description('The name of the SKU, such as Standard_D32ds_v4.')
param skuName string = 'Standard_B1ms'
param backupRetentionDays int = 7
@allowed([
'Disabled'
'Enabled'
])
param geoRedundantBackup string = 'Disabled'
param serverName string = '${resourceNamePrefix}sqlserver'
param databaseName string = '${resourceNamePrefix}mysqldb'
resource server 'Microsoft.DBforMySQL/flexibleServers@2021-12-01-preview' = {
location: location
name: serverName
sku: {
name: skuName
tier: serverEdition
}
properties: {
version: version
administratorLogin: administratorLogin
administratorLoginPassword: administratorLoginPassword
availabilityZone: availabilityZone
highAvailability: {
mode: haEnabled
standbyAvailabilityZone: standbyAvailabilityZone
}
storage: {
storageSizeGB: storageSizeGB
iops: storageIops
autoGrow: storageAutogrow
}
backup: {
backupRetentionDays: backupRetentionDays
geoRedundantBackup: geoRedundantBackup
}
}
}
@batchSize(1)
module createFirewallRules './CreateFirewallRules.bicep' = [for i in range(0, ((length(firewallRules) > 0) ? length(firewallRules) : 1)): {
name: 'firewallRules-${i}'
params: {
ip: firewallRules[i]
serverName: serverName
}
dependsOn: [
server
]
}]
resource database 'Microsoft.DBforMySQL/flexibleServers/databases@2021-12-01-preview' = {
parent: server
name: databaseName
properties: {
charset: 'utf8'
collation: 'utf8_general_ci'
}
}
CreateFirewallRules.bicep:
param serverName string
param ip object
resource firewallRules 'Microsoft.DBforMySQL/flexibleServers/firewallRules@2021-12-01-preview' = {
name: '${serverName}/${ip.name}'
properties: {
startIpAddress: ip.startIPAddress
endIpAddress: ip.endIPAddress
}
}
將兩個 Bicep 檔案儲存在相同的目錄中。
建立具有私人存取權的伺服器
修改下列程式代碼範例,以部署在虛擬網路內具有私人存取權的 適用於 MySQL 的 Azure 資料庫 彈性伺服器:
@description('Provide a prefix for creating resource names.')
param resourceNamePrefix string
@description('Provide the location for all the resources.')
param location string = resourceGroup().location
@description('Provide the administrator login name for the MySQL server.')
param administratorLogin string
@description('Provide the administrator login password for the MySQL server.')
@secure()
param administratorLoginPassword string
@description('Provide Virtual Network Address Prefix')
param vnetAddressPrefix string = '10.0.0.0/16'
@description('Provide Subnet Address Prefix')
param subnetPrefix string = '10.0.0.0/24'
@description('Provide the tier of the specific SKU. High availability is available only in the GeneralPurpose and MemoryOptimized SKUs.')
@allowed([
'Burstable'
'Generalpurpose'
'MemoryOptimized'
])
param serverEdition string = 'Burstable'
@description('Provide Server version')
@allowed([
'5.7'
'8.0.21'
])
param serverVersion string = '8.0.21'
@description('The availability zone information for the server. (If you don't have a preference, leave blank.)')
param availabilityZone string = '1'
@description('Provide the high availability mode for a server: Disabled, SameZone, or ZoneRedundant.')
@allowed([
'Disabled'
'SameZone'
'ZoneRedundant'
])
param haEnabled string = 'Disabled'
@description('Provide the availability zone of the standby server.')
param standbyAvailabilityZone string = '2'
param storageSizeGB int = 20
param storageIops int = 360
@allowed([
'Enabled'
'Disabled'
])
param storageAutogrow string = 'Enabled'
@description('The name of the sku, e.g. Standard_D32ds_v4.')
param skuName string = 'Standard_B1ms'
param backupRetentionDays int = 7
@allowed([
'Disabled'
'Enabled'
])
param geoRedundantBackup string = 'Disabled'
var serverName = '${resourceNamePrefix}mysqlserver'
var databaseName = '${resourceNamePrefix}mysqldatabase'
var vnetName = '${resourceNamePrefix}mysqlvnet'
var subnetName = '${resourceNamePrefix}mysqlsubnet'
resource vnet 'Microsoft.Network/virtualNetworks@2022-07-01' = {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: [
vnetAddressPrefix
]
}
}
}
resource subnet 'Microsoft.Network/virtualNetworks/subnets@2022-07-01' = {
parent: vnet
name: subnetName
properties: {
addressPrefix: subnetPrefix
delegations: [
{
name: 'MySQLflexibleServers'
properties: {
serviceName: 'Microsoft.DBforMySQL/flexibleServers'
}
}
]
}
}
resource server 'Microsoft.DBforMySQL/flexibleServers@2021-12-01-preview' = {
location: location
name: serverName
sku: {
name: skuName
tier: serverEdition
}
properties: {
version: serverVersion
administratorLogin: administratorLogin
administratorLoginPassword: administratorLoginPassword
availabilityZone: availabilityZone
highAvailability: {
mode: haEnabled
standbyAvailabilityZone: standbyAvailabilityZone
}
storage: {
storageSizeGB: storageSizeGB
iops: storageIops
autoGrow: storageAutogrow
}
network: {
delegatedSubnetResourceId: subnet.id
}
backup: {
backupRetentionDays: backupRetentionDays
geoRedundantBackup: geoRedundantBackup
}
}
}
resource database 'Microsoft.DBforMySQL/flexibleServers/databases@2021-12-01-preview' = {
parent: server
name: databaseName
properties: {
charset: 'utf8'
collation: 'utf8_general_ci'
}
}
部署範本
使用 Azure CLI 或 Azure PowerShell 部署 Bicep 檔案。
az group create --name exampleRG --location eastus
az deployment group create --resource-group exampleRG --template-file main.bicep
請依照指示輸入參數值。 當部署完成時,您應該會看到指出部署成功的訊息。
檢閱已部署的資源
若要確認已在資源群組中建立 適用於 MySQL 的 Azure 資料庫 彈性伺服器:
az resource list --resource-group exampleRG
清除資源
若要刪除資源群組和資源群組中包含的資源:
az group delete --name exampleRG