适用于:
Azure SQL 托管实例
本快速入门将指导你使用 Azure 门户、PowerShell 和 Azure CLI 创建 Azure SQL 托管实例的部署。
先决条件
- Azure 订阅。 如果没有 Azure 订阅,请创建一个免费帐户
- 一般情况下,用户需要在订阅范围内被分配 SQL 托管实例参与者角色。
- 如果在已委托给 Azure SQL 托管实例的子网中进行预配,则用户只需在订阅范围内分配有 Microsoft.Sql/managedInstances/write 权限即可。
- 最新版本的 Az.SQL PowerShell 模块,或最新版本的 Azure CLI。
有关限制,请参阅支持的区域和支持的订阅类型。
创建 Azure SQL 托管实例
可以使用 Azure 门户、PowerShell 和 Azure CLI 创建 Azure SQL 托管实例的部署。
考虑以下情况:
- 可通过 Azure 门户、PowerShell、Azure CLI 或其他使用 REST API 的工具来取消预配过程。
- 如果实例部署受到同一子网中其他操作的影响,例如长时间运行的还原或实例规模缩放,则实例部署可能会被延迟。
- 要查看资源组中的托管实例,需要有资源组的读取权限。
重要
部署托管实例是一项运行时间很长的操作。 将第一个实例部署到子网所需的时间通常比在已有实例的子网中进行实例部署长得多。
登录到 Azure 门户
要在 Azure 门户中创建实例,首先需要登录 Azure 门户,然后在“创建 Azure SQL 托管实例”页面上填写信息。
要创建实例,请按照以下步骤操作:
登录到 Azure 门户。
在 Azure 门户的左侧菜单上选择“Azure SQL”。 如果 Azure SQL 不在列表中,请选择“所有服务”,然后在搜索框中输入“Azure SQL”。
选择“+ 创建”以打开“选择 SQL 部署选项”页。 通过在“SQL 托管实例”磁贴上选择“显示详细信息”,可以查看有关 Azure SQL 托管实例的其他信息 。
从下拉列表中选择“单一实例”,然后选择“创建”,以打开创建 Azure SQL 托管实例页面。
“基本信息”选项卡
填写“基本信息”选项卡中的必需信息。这是预配 SQL 托管实例所需的最低要求。
下表提供了“基本信息”选项卡上所需信息的详细信息:
设置 |
建议值 |
说明 |
订阅 |
你的订阅。 |
你有权在其中创建新资源的订阅。 |
资源组 |
新的或现有的资源组。 |
如需有效的资源组名称,请参阅 Naming rules and restrictions(命名规则和限制)。 |
托管实例名称 |
任何有效的名称。 |
请参阅命名规则和限制,了解什么是有效的名称。 |
区域 |
要在其中创建托管实例的区域。 |
有关区域的信息,请参阅 Azure 区域。 |
是否属于实例池? |
如果要在实例池中创建此实例,请选择“是”。 |
|
身份验证方法 |
使用 SQL 身份验证 |
为了完成本快速入门,请使用 SQL 身份验证。 但也可以选择同时使用 SQL 和 Microsoft Entra 身份验证。 |
托管实例管理员登录名 |
任何有效的用户名。 |
请参阅命名规则和限制,了解什么是有效的名称。 不要使用 serveradmin ,因为这是保留的服务器级角色。 |
密码 |
任何有效的密码。 |
密码必须至少 16 个字符,且符合定义的复杂性要求。 |
在托管实例详细信息下,选择“计算 + 存储”部分的“配置托管实例”,以打开”计算 + 存储“页面。
下表提供了有关示例 SQL 托管实例的计算和存储建议:
设置 |
建议值 |
说明 |
服务层级 |
常规用途 |
常规用途层级适用于大多数生产工作负载,它是默认选项。 改进的下一代常规用途服务层级也是大多数工作负荷的优秀选择。 有关详细信息,请参阅资源限制。 |
硬件代系 |
标准系列 (Gen5) |
标准系列 (Gen5) 是默认的硬件代系(它定义了计算和内存限制)。 默认为标准系列 (Gen5)。 |
vCore 数 |
指定一个值。 |
vCore 数量是指始终为工作负载预配的确切计算资源量。 默认值为 8 个 vCore。 |
存储空间(以 GB 为单位) |
指定一个值。 |
存储大小(以 GB 为单位),请根据预期的数据大小进行选择。 |
SQL Server 许可证 |
选择适用的授权模型。 |
既可以即用即付,也可以使用具有 Azure 混合权益的现有 SQL 许可证,还可以启用混合故障转移权限 |
备份存储冗余 |
异地冗余备份存储。 |
Azure 中用于备份存储的存储冗余。 异地冗余备份存储是默认设置,也是建议的设置,但通过异地区域、区域和本地冗余,可提高成本灵活性,实现单区域数据驻留。 |
指定“计算 + 存储”配置后,使用“应用”保存设置,然后导航回“创建 Azure SQL 托管实例”页面。 选择“下一步”,转到“网络”选项卡
“网络”选项卡
填写“网络”选项卡中的可选信息。如果省略此信息,门户会应用默认设置。
下表提供了有关“网络”选项卡的详细信息:
设置 |
建议值 |
说明 |
虚拟网络/子网 |
创建新的或使用现有的虚拟网络 |
如果网络或子网不可用,则必须先对其进行修改以满足网络要求,然后再选择它作为新托管实例的目标。 |
连接类型 |
选择合适的连接类型。 |
有关详细信息,请参阅连接类型。 |
公共终结点 |
选择“禁用”。 |
若要通过公共数据终结点访问托管实例,需启用此选项。 |
允许的访问来源(如果启用了“公共终结点”) |
选择“无访问权限” |
门户使用公共终结点配置安全组。
根据具体的方案选择以下选项之一: - Azure 服务:从 Power BI 或另一多租户服务进行连接时,建议使用此选项。
- Internet:用于测试,可让你快速运转托管实例。 不建议用于生产环境。
- 不允许访问:此选项创建一个“拒绝”安全规则。 修改此规则才能通过公共终结点访问托管实例。
有关公共终结点安全性的详细信息,请参阅通过公共终结点安全使用 Azure SQL 托管实例。 |
选择“查看 + 创建”,在创建托管实例之前查看所做的选择。 或者,通过选择“下一步:安全设置”来配置安全设置。
“安全性”选项卡
为了完成本快速入门,请将“安全性”选项卡上的设置保留为默认值。
选择“查看 + 创建”,在创建托管实例之前查看所做的选择。 也可配置更多自定义设置,方法是选择“下一步:其他设置”。
其他设置
填写“附加设置”选项卡中的可选信息。如果省略此信息,门户会应用默认设置。
下表提供了有关“附加设置”选项卡的详细信息:
设置 |
建议值 |
说明 |
排序规则 |
选择需要用于托管实例的排序规则。 如果从 SQL Server 迁移数据库,请使用 SELECT SERVERPROPERTY(N'Collation') 检查源排序规则并使用该值。 |
有关排序规则的信息,请参阅设置或更改服务器排序规则。 |
时区 |
选择要求托管实例遵循的时区。 |
有关详细信息,请参阅时区。 |
异地复制 |
请选择“否”。 |
只有计划将托管实例用作故障转移组辅助时,才应启用此选项。 |
维护时段 |
选择适当的维护时段。 |
指定服务维护实例的时间安排。 |
选择“查看 + 创建”,在创建托管实例之前查看所做的选择。 或者,选择“下一步:标记”来配置 Azure 标记(推荐)。
将标记添加到 Azure 资源管理器模板(ARM 模板)中的资源。 可以通过标记对资源进行逻辑组织。 标记值显示在成本报表中,可通过它们按标记执行其他管理活动。 请考虑至少使用“所有者”标记来标记新的 SQL 托管实例以确定创建者,并使用“环境”标记进行标记来确定此系统是生产环境还是开发环境等。有关详细信息,请参阅为 Azure 资源开发命名和标记策略。
选择“查看 + 创建”以继续。
查看 + 创建
在“查看 + 创建”选项卡中,查看选择,然后选择“创建”,以部署托管实例。
监视部署进度
选择“通知”图标以查看部署状态。
在通知中选择“正在进行的部署”以打开 SQL 托管实例窗口,进一步监视部署进度。
部署完成后,导航到资源组以查看托管实例:
提示
如果已关闭 Web 浏览器或已退出部署进度屏幕,可通过托管实例在 Azure 门户中的“概述”页面、PowerShell 或 Azure CLI 来监视预配操作。
使用 PowerShell 创建实例。 有关详细信息,请参阅使用 PowerShell 创建 SQL 托管实例。
首先,设置变量:
$NSnetworkModels = "Microsoft.Azure.Commands.Network.Models"
$NScollections = "System.Collections.Generic"
# The SubscriptionId in which to create these objects
$SubscriptionId = '<Enter subscription ID>'
# Set the resource group name and location for your managed instance
$resourceGroupName = "myResourceGroup-$(Get-Random)"
$location = "eastus2"
# Set the networking values for your managed instance
$vNetName = "myVnet-$(Get-Random)"
$vNetAddressPrefix = "10.0.0.0/16"
$defaultSubnetName = "myDefaultSubnet-$(Get-Random)"
$defaultSubnetAddressPrefix = "10.0.0.0/24"
$miSubnetName = "MISubnet-$(Get-Random)"
$miSubnetAddressPrefix = "10.0.0.0/24"
#Set the managed instance name for the new managed instance
$instanceName = "mi-name-$(Get-Random)"
# Set the admin login and password for your managed instance
$miAdminSqlLogin = "SqlAdmin"
$miAdminSqlPassword = "ChangeThisPassword!!"
# Set the managed instance service tier, compute level, and license mode
$edition = "General Purpose"
$vCores = 8
$maxStorage = 256
$computeGeneration = "Gen5"
$license = "LicenseIncluded" #"BasePrice" or LicenseIncluded if you have don't have SQL Server licence that can be used for AHB discount
$dbname = 'SampleDB'
接下来,创建资源组:
# Set subscription context
Connect-AzAccount
$subscriptionContextParams = @{
SubscriptionId = $SubscriptionId
}
Set-AzContext @subscriptionContextParams
# Create a resource group
$resourceGroupParams = @{
Name = $resourceGroupName
Location = $location
Tag = @{Owner="SQLDB-Samples"}
}
$resourceGroup = New-AzResourceGroup @resourceGroupParams
之后,创建虚拟网络:
# Configure virtual network, subnets, network security group, and routing table
$networkSecurityGroupParams = @{
Name = 'myNetworkSecurityGroupMiManagementService'
ResourceGroupName = $resourceGroupName
Location = $location
}
$networkSecurityGroupMiManagementService = New-AzNetworkSecurityGroup @networkSecurityGroupParams
$routeTableParams = @{
Name = 'myRouteTableMiManagementService'
ResourceGroupName = $resourceGroupName
Location = $location
}
$routeTableMiManagementService = New-AzRouteTable @routeTableParams
$virtualNetworkParams = @{
ResourceGroupName = $resourceGroupName
Location = $location
Name = $vNetName
AddressPrefix = $vNetAddressPrefix
}
$virtualNetwork = New-AzVirtualNetwork @virtualNetworkParams
$subnetConfigParams = @{
Name = $miSubnetName
VirtualNetwork = $virtualNetwork
AddressPrefix = $miSubnetAddressPrefix
NetworkSecurityGroup = $networkSecurityGroupMiManagementService
RouteTable = $routeTableMiManagementService
}
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnetConfigParams | Set-AzVirtualNetwork
$virtualNetwork = Get-AzVirtualNetwork -Name $vNetName -ResourceGroupName $resourceGroupName
$subnet= $virtualNetwork.Subnets[0]
# Create a delegation
$subnet.Delegations = New-Object "$NScollections.List``1[$NSnetworkModels.PSDelegation]"
$delegationName = "dgManagedInstance" + (Get-Random -Maximum 1000)
$delegationParams = @{
Name = $delegationName
ServiceName = "Microsoft.Sql/managedInstances"
}
$delegation = New-AzDelegation @delegationParams
$subnet.Delegations.Add($delegation)
Set-AzVirtualNetwork -VirtualNetwork $virtualNetwork
$miSubnetConfigId = $subnet.Id
$allowParameters = @{
Access = 'Allow'
Protocol = 'Tcp'
Direction= 'Inbound'
SourcePortRange = '*'
SourceAddressPrefix = 'VirtualNetwork'
DestinationAddressPrefix = '*'
}
$denyInParameters = @{
Access = 'Deny'
Protocol = '*'
Direction = 'Inbound'
SourcePortRange = '*'
SourceAddressPrefix = '*'
DestinationPortRange = '*'
DestinationAddressPrefix = '*'
}
$denyOutParameters = @{
Access = 'Deny'
Protocol = '*'
Direction = 'Outbound'
SourcePortRange = '*'
SourceAddressPrefix = '*'
DestinationPortRange = '*'
DestinationAddressPrefix = '*'
}
$networkSecurityGroupParams = @{
ResourceGroupName = $resourceGroupName
Name = "myNetworkSecurityGroupMiManagementService"
}
$networkSecurityGroup = Get-AzNetworkSecurityGroup @networkSecurityGroupParams
$allowRuleParams = @{
Access = 'Allow'
Protocol = 'Tcp'
Direction = 'Inbound'
SourcePortRange = '*'
SourceAddressPrefix = 'VirtualNetwork'
DestinationAddressPrefix = '*'
}
$denyInRuleParams = @{
Access = 'Deny'
Protocol = '*'
Direction = 'Inbound'
SourcePortRange = '*'
SourceAddressPrefix = '*'
DestinationPortRange = '*'
DestinationAddressPrefix = '*'
}
$denyOutRuleParams = @{
Access = 'Deny'
Protocol = '*'
Direction = 'Outbound'
SourcePortRange = '*'
SourceAddressPrefix = '*'
DestinationPortRange = '*'
DestinationAddressPrefix = '*'
}
$networkSecurityGroup |
Add-AzNetworkSecurityRuleConfig @allowRuleParams -Priority 1000 -Name "allow_tds_inbound" -DestinationPortRange 1433 |
Add-AzNetworkSecurityRuleConfig @allowRuleParams -Priority 1100 -Name "allow_redirect_inbound" -DestinationPortRange 11000-11999 |
Add-AzNetworkSecurityRuleConfig @denyInRuleParams -Priority 4096 -Name "deny_all_inbound" |
Add-AzNetworkSecurityRuleConfig @denyOutRuleParams -Priority 4096 -Name "deny_all_outbound" |
Set-AzNetworkSecurityGroup
最后,创建实例:
# Create credentials
$secpassword = ConvertTo-SecureString $miAdminSqlPassword -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList @($miAdminSqlLogin, $secpassword)
$managedInstanceParams = @{
Name = $instanceName
ResourceGroupName = $resourceGroupName
Location = $location
SubnetId = $miSubnetConfigId
AdministratorCredential = $credential
StorageSizeInGB = $maxStorage
VCore = $vCores
Edition = $edition
ComputeGeneration = $computeGeneration
LicenseType = $license
}
New-AzSqlInstance @managedInstanceParams
使用 Azure CLI 创建实例。 有关详细信息,请参阅使用 Azure CLI 创建 SQL 托管实例。
首先,设置变量:
# Variable block
let "randomIdentifier=$RANDOM*$RANDOM"
location="East US"
resourceGroup="msdocs-azuresql-rg-$randomIdentifier"
tag="create-managed-instance"
vNet="msdocs-azuresql-vnet-$randomIdentifier"
subnet="msdocs-azuresql-subnet-$randomIdentifier"
nsg="msdocs-azuresql-nsg-$randomIdentifier"
route="msdocs-azuresql-route-$randomIdentifier"
instance="msdocs-azuresql-instance-$randomIdentifier"
login="azureuser"
password="Pa$$w0rD-$randomIdentifier"
dbname="SampleDB"
echo "Using resource group $resourceGroup with login: $login, password: $password..."
接下来,创建资源组:
echo "Creating $resourceGroup in $location..."
az group create --name $resourceGroup --location "$location" --tags $tag
之后,创建虚拟网络:
echo "Creating $vNet with $subnet..."
az network vnet create --name $vNet --resource-group $resourceGroup --location "$location" --address-prefixes 10.0.0.0/16
az network vnet subnet create --name $subnet --resource-group $resourceGroup --vnet-name $vNet --address-prefixes 10.0.0.0/24 --delegations Microsoft.Sql/managedInstances
echo "Creating $nsg..."
az network nsg create --name $nsg --resource-group $resourceGroup --location "$location"
az network nsg rule create --name "allow_management_inbound" --nsg-name $nsg --priority 100 --resource-group $resourceGroup --access Allow --destination-address-prefixes 10.0.0.0/24 --destination-port-ranges 9000 9003 1438 1440 1452 --direction Inbound --protocol Tcp --source-address-prefixes "*" --source-port-ranges "*"
az network nsg rule create --name "allow_misubnet_inbound" --nsg-name $nsg --priority 200 --resource-group $resourceGroup --access Allow --destination-address-prefixes 10.0.0.0/24 --destination-port-ranges "*" --direction Inbound --protocol "*" --source-address-prefixes 10.0.0.0/24 --source-port-ranges "*"
az network nsg rule create --name "allow_health_probe_inbound" --nsg-name $nsg --priority 300 --resource-group $resourceGroup --access Allow --destination-address-prefixes 10.0.0.0/24 --destination-port-ranges "*" --direction Inbound --protocol "*" --source-address-prefixes AzureLoadBalancer --source-port-ranges "*"
az network nsg rule create --name "allow_management_outbound" --nsg-name $nsg --priority 1100 --resource-group $resourceGroup --access Allow --destination-address-prefixes AzureCloud --destination-port-ranges 443 12000 --direction Outbound --protocol Tcp --source-address-prefixes 10.0.0.0/24 --source-port-ranges "*"
az network nsg rule create --name "allow_misubnet_outbound" --nsg-name $nsg --priority 200 --resource-group $resourceGroup --access Allow --destination-address-prefixes 10.0.0.0/24 --destination-port-ranges "*" --direction Outbound --protocol "*" --source-address-prefixes 10.0.0.0/24 --source-port-ranges "*"
echo "Creating $route..."
az network route-table create --name $route --resource-group $resourceGroup --location "$location"
az network route-table route create --address-prefix 0.0.0.0/0 --name "primaryToMIManagementService" --next-hop-type Internet --resource-group $resourceGroup --route-table-name $route
az network route-table route create --address-prefix 10.0.0.0/24 --name "ToLocalClusterNode" --next-hop-type VnetLocal --resource-group $resourceGroup --route-table-name $route
echo "Configuring $subnet with $nsg and $route..."
az network vnet subnet update --name $subnet --network-security-group $nsg --route-table $route --vnet-name $vNet --resource-group $resourceGroup
最后,创建实例:
# This step will take awhile to complete. You can monitor deployment progress in the activity log within the Azure portal.
echo "Creating $instance with $vNet and $subnet..."
az sql mi create --admin-password $password --admin-user $login --name $instance --resource-group $resourceGroup --subnet $subnet --vnet-name $vNet --location "$location"
查看网络设置
选择资源组中的“路由表”资源,查看默认的用户定义路由表对象和条目,它们用于路由来自 SQL 托管实例虚拟网络和该网络内的流量。 若要更改或添加路由,请在路由表设置中打开“路由”。
选择网络安全组对象,查看入站和出站安全规则。 若要更改或添加规则,请在网络安全组设置中打开“入站安全规则”和“出站安全规则” 。
重要
如果为 SQL 托管实例启用了公共终结点,请打开端口以允许从公共互联网连接到 SQL 托管实例的网络流量。
创建数据库
可以使用 Azure 门户、PowerShell 或 Azure CLI 创建新数据库。
要在 Azure 门户中为实例创建新数据库,请按照以下步骤操作:
转到 Azure 门户中的 SQL 托管实例。
在 SQL 托管实例的“概述”页面,选择“+ 新建数据库”,打开“创建 Azure SQL 托管数据库”页面。
在“基本信息”选项卡上为数据库提供名称。
在“数据源”选项卡上,为空数据库选择“无”,或从备份还原数据库。
配置剩余选项卡上的剩余设置,然后选择“查看 + 创建”以验证选择。
使用创建部署数据库。
使用 PowerShell 创建数据库:
$databaseParams = @{
ResourceGroupName = $resourceGroupName
InstanceName = $instanceName
Name = $dbname
Collation = 'Latin1_General_100_CS_AS_SC'
}
New-AzSqlInstanceDatabase @databaseParams
使用 Azure CLI 创建数据库:
az sql midb create -g $resourceGroup --mi $instance -n $dbname --collation Latin1_General_100_CS_AS_SC
检索 SQL 托管实例的连接详细信息
若要连接到 SQL 托管实例,请遵循以下步骤检索主机名和完全限定的域名 (FQDN):
返回资源组并选择创建的 SQL 托管实例对象。
在“概述”选项卡上,找到“主机”属性。 通过单击“复制到剪贴板”按钮,将托管实例的主机名复制到剪贴板,以便在下一篇快速入门中使用。
复制的值表示可用于连接到 SQL 托管实例的完全限定域名 (FQDN)。 FQDN 类似于以下地址示例:your_host_name.a1b2c3d4e5f6.database.windows.net。
相关内容
查看以下相关内容:
将现有 SQL Server 数据库从本地还原到 SQL 托管实例:
后续步骤
将应用程序连接到 SQL 托管实例。