Azure Resource Manager Mysql Dotnet

作者 microsoft354361d83247MIT收录于 2026年10月8日更新于 2026年10月8日

Azure MySQL Flexible Server SDK for .NET. Database management for MySQL Flexible Server deployments. Use for creating servers, databases, firewall rules, configurations, backups, and high availability. Triggers: "MySQL", "MySqlFlexibleServer", "MySQL Flexible Server", "Azure Database for MySQL", "MySQL database management", "MySQL firewall", "MySQL backup".

AI 生成的概览

指导 .NET 开发者使用 Azure Resource Manager SDK 管理 Azure MySQL 灵活服务器部署。

功能
该技能提供参考说明和 C# 代码示例,用于通过 .NET 的 Azure.ResourceManager.MySql SDK 管理 Azure Database for MySQL 灵活服务器。内容涵盖创建服务器和数据库、配置防火墙规则和服务器参数、设置 Entra ID 管理员、备份与时间点还原、高可用性、扩缩容以及启动、停止和删除操作。它还列出关键 SDK 类型、SKU 层级、高可用模式、最佳实践、错误处理和连接字符串写法。
适用场景
适用于编写用于预配或操作 Azure MySQL 灵活服务器资源的 .NET 代码时,例如创建服务器、添加数据库、开放防火墙规则、调整参数或从备份还原。它适合通过 Azure Resource Manager SDK 完成的基础设施管理任务,而非应用程序数据访问。
运行要求
需要 .NET SDK 以及 Azure.ResourceManager.MySql 和 Azure.Identity NuGet 包,还需要 Azure 订阅、资源组和凭据(DefaultAzureCredential 或 ManagedIdentityCredential 等特定凭据)。需使用订阅 ID、资源组和服务器名称等环境变量,并需要访问 Azure 的网络连接。该技能不附带脚本,仅为说明和代码示例。

Azure.ResourceManager.MySql (.NET)

Azure Resource Manager SDK for managing MySQL Flexible Server deployments.

Installation

bash
dotnet add package Azure.ResourceManager.MySqldotnet add package Azure.Identity

Current Version: v1.2.0 (GA)
API Version: 2023-12-30

Note: This skill focuses on MySQL Flexible Server. Single Server is deprecated and scheduled for retirement.

Environment Variables

bash
AZURE_SUBSCRIPTION_ID=<your-subscription-id>  # Required: Azure subscription IDAZURE_RESOURCE_GROUP=<your-resource-group>  # Required: resource group nameAZURE_MYSQL_SERVER_NAME=<your-mysql-server>  # Required: MySQL Flexible Server nameAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production

Authentication

csharp
using Azure.Identity;using Azure.ResourceManager;using Azure.ResourceManager.MySql;using Azure.ResourceManager.MySql.FlexibleServers;
// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>var credential = new DefaultAzureCredential(    DefaultAzureCredential.DefaultEnvironmentVariableName);// Or use a specific credential directly in production:// See https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes// var credential = new ManagedIdentityCredential();ArmClient client = new ArmClient(credential);

Resource Hierarchy

Subscription└── ResourceGroup    └── MySqlFlexibleServer                 # MySQL Flexible Server instance        ├── MySqlFlexibleServerDatabase     # Database within the server        ├── MySqlFlexibleServerFirewallRule # IP firewall rules        ├── MySqlFlexibleServerConfiguration # Server parameters        ├── MySqlFlexibleServerBackup       # Backup information        ├── MySqlFlexibleServerMaintenanceWindow # Maintenance schedule        └── MySqlFlexibleServerAadAdministrator # Entra ID admin

Core Workflows

1. Create MySQL Flexible Server

csharp
using Azure.ResourceManager.MySql.FlexibleServers;using Azure.ResourceManager.MySql.FlexibleServers.Models;
ResourceGroupResource resourceGroup = await client    .GetDefaultSubscriptionAsync()    .Result    .GetResourceGroupAsync("my-resource-group");
MySqlFlexibleServerCollection servers = resourceGroup.GetMySqlFlexibleServers();
MySqlFlexibleServerData data = new MySqlFlexibleServerData(AzureLocation.EastUS){    Sku = new MySqlFlexibleServerSku("Standard_D2ds_v4", MySqlFlexibleServerSkuTier.GeneralPurpose),    AdministratorLogin = "mysqladmin",    AdministratorLoginPassword = "YourSecurePassword123!",    Version = MySqlFlexibleServerVersion.Ver8_0_21,    Storage = new MySqlFlexibleServerStorage    {        StorageSizeInGB = 128,        AutoGrow = MySqlFlexibleServerEnableStatusEnum.Enabled,        Iops = 3000    },    Backup = new MySqlFlexibleServerBackupProperties    {        BackupRetentionDays = 7,        GeoRedundantBackup = MySqlFlexibleServerEnableStatusEnum.Disabled    },    HighAvailability = new MySqlFlexibleServerHighAvailability    {        Mode = MySqlFlexibleServerHighAvailabilityMode.ZoneRedundant,        StandbyAvailabilityZone = "2"    },    AvailabilityZone = "1"};
ArmOperation<MySqlFlexibleServerResource> operation = await servers    .CreateOrUpdateAsync(WaitUntil.Completed, "my-mysql-server", data);
MySqlFlexibleServerResource server = operation.Value;Console.WriteLine($"Server created: {server.Data.FullyQualifiedDomainName}");

2. Create Database

csharp
MySqlFlexibleServerResource server = await resourceGroup    .GetMySqlFlexibleServerAsync("my-mysql-server");
MySqlFlexibleServerDatabaseCollection databases = server.GetMySqlFlexibleServerDatabases();
MySqlFlexibleServerDatabaseData dbData = new MySqlFlexibleServerDatabaseData{    Charset = "utf8mb4",    Collation = "utf8mb4_unicode_ci"};
ArmOperation<MySqlFlexibleServerDatabaseResource> operation = await databases    .CreateOrUpdateAsync(WaitUntil.Completed, "myappdb", dbData);
MySqlFlexibleServerDatabaseResource database = operation.Value;Console.WriteLine($"Database created: {database.Data.Name}");

3. Configure Firewall Rules

csharp
MySqlFlexibleServerFirewallRuleCollection firewallRules = server.GetMySqlFlexibleServerFirewallRules();
// Allow specific IP rangeMySqlFlexibleServerFirewallRuleData ruleData = new MySqlFlexibleServerFirewallRuleData{    StartIPAddress = System.Net.IPAddress.Parse("10.0.0.1"),    EndIPAddress = System.Net.IPAddress.Parse("10.0.0.255")};
ArmOperation<MySqlFlexibleServerFirewallRuleResource> operation = await firewallRules    .CreateOrUpdateAsync(WaitUntil.Completed, "allow-internal", ruleData);
// Allow Azure servicesMySqlFlexibleServerFirewallRuleData azureServicesRule = new MySqlFlexibleServerFirewallRuleData{    StartIPAddress = System.Net.IPAddress.Parse("0.0.0.0"),    EndIPAddress = System.Net.IPAddress.Parse("0.0.0.0")};
await firewallRules.CreateOrUpdateAsync(WaitUntil.Completed, "AllowAllAzureServicesAndResourcesWithinAzureIps", azureServicesRule);

4. Update Server Configuration

csharp
MySqlFlexibleServerConfigurationCollection configurations = server.GetMySqlFlexibleServerConfigurations();
// Get current configurationMySqlFlexibleServerConfigurationResource config = await configurations    .GetAsync("max_connections");
// Update configurationMySqlFlexibleServerConfigurationData configData = new MySqlFlexibleServerConfigurationData{    Value = "500",    Source = MySqlFlexibleServerConfigurationSource.UserOverride};
ArmOperation<MySqlFlexibleServerConfigurationResource> operation = await configurations    .CreateOrUpdateAsync(WaitUntil.Completed, "max_connections", configData);
// Common configurations to tunestring[] commonParams = { "max_connections", "innodb_buffer_pool_size", "slow_query_log", "long_query_time" };

5. Configure Entra ID Administrator

csharp
MySqlFlexibleServerAadAdministratorCollection admins = server.GetMySqlFlexibleServerAadAdministrators();
MySqlFlexibleServerAadAdministratorData adminData = new MySqlFlexibleServerAadAdministratorData{    AdministratorType = MySqlFlexibleServerAdministratorType.ActiveDirectory,    Login = "[email protected]",    Sid = Guid.Parse("<entra-object-id>"),    TenantId = Guid.Parse("<tenant-id>"),    IdentityResourceId = new ResourceIdentifier("/subscriptions/.../userAssignedIdentities/mysql-identity")};
ArmOperation<MySqlFlexibleServerAadAdministratorResource> operation = await admins    .CreateOrUpdateAsync(WaitUntil.Completed, "ActiveDirectory", adminData);

6. List and Manage Servers

csharp
// List servers in resource groupawait foreach (MySqlFlexibleServerResource server in resourceGroup.GetMySqlFlexibleServers()){    Console.WriteLine($"Server: {server.Data.Name}");    Console.WriteLine($"  FQDN: {server.Data.FullyQualifiedDomainName}");    Console.WriteLine($"  Version: {server.Data.Version}");    Console.WriteLine($"  State: {server.Data.State}");    Console.WriteLine($"  SKU: {server.Data.Sku.Name} ({server.Data.Sku.Tier})");}
// List databases in serverawait foreach (MySqlFlexibleServerDatabaseResource db in server.GetMySqlFlexibleServerDatabases()){    Console.WriteLine($"Database: {db.Data.Name}");}

7. Backup and Restore

csharp
// List available backupsawait foreach (MySqlFlexibleServerBackupResource backup in server.GetMySqlFlexibleServerBackups()){    Console.WriteLine($"Backup: {backup.Data.Name}");    Console.WriteLine($"  Type: {backup.Data.BackupType}");    Console.WriteLine($"  Completed: {backup.Data.CompletedOn}");}
// Point-in-time restoreMySqlFlexibleServerData restoreData = new MySqlFlexibleServerData(AzureLocation.EastUS){    CreateMode = MySqlFlexibleServerCreateMode.PointInTimeRestore,    SourceServerResourceId = server.Id,    RestorePointInTime = DateTimeOffset.UtcNow.AddHours(-2)};
ArmOperation<MySqlFlexibleServerResource> operation = await servers    .CreateOrUpdateAsync(WaitUntil.Completed, "my-mysql-restored", restoreData);

8. Stop and Start Server

csharp
MySqlFlexibleServerResource server = await resourceGroup    .GetMySqlFlexibleServerAsync("my-mysql-server");
// Stop server (saves costs when not in use)await server.StopAsync(WaitUntil.Completed);
// Start serverawait server.StartAsync(WaitUntil.Completed);
// Restart serverawait server.RestartAsync(WaitUntil.Completed, new MySqlFlexibleServerRestartParameter{    RestartWithFailover = MySqlFlexibleServerEnableStatusEnum.Enabled,    MaxFailoverSeconds = 60});

9. Update Server (Scale)

csharp
MySqlFlexibleServerResource server = await resourceGroup    .GetMySqlFlexibleServerAsync("my-mysql-server");
MySqlFlexibleServerPatch patch = new MySqlFlexibleServerPatch{    Sku = new MySqlFlexibleServerSku("Standard_D4ds_v4", MySqlFlexibleServerSkuTier.GeneralPurpose),    Storage = new MySqlFlexibleServerStorage    {        StorageSizeInGB = 256,        Iops = 6000    }};
ArmOperation<MySqlFlexibleServerResource> operation = await server    .UpdateAsync(WaitUntil.Completed, patch);

10. Delete Server

csharp
MySqlFlexibleServerResource server = await resourceGroup    .GetMySqlFlexibleServerAsync("my-mysql-server");
await server.DeleteAsync(WaitUntil.Completed);

Key Types Reference

TypePurpose
MySqlFlexibleServerResourceFlexible Server instance
MySqlFlexibleServerDataServer configuration data
MySqlFlexibleServerCollectionCollection of servers
MySqlFlexibleServerDatabaseResourceDatabase within server
MySqlFlexibleServerFirewallRuleResourceIP firewall rule
MySqlFlexibleServerConfigurationResourceServer parameter
MySqlFlexibleServerBackupResourceBackup metadata
MySqlFlexibleServerAadAdministratorResourceEntra ID admin
MySqlFlexibleServerSkuSKU (compute tier + size)
MySqlFlexibleServerStorageStorage configuration
MySqlFlexibleServerHighAvailabilityHA configuration
MySqlFlexibleServerBackupPropertiesBackup settings

SKU Tiers

TierUse CaseSKU Examples
BurstableDev/test, light workloadsStandard_B1ms, Standard_B2s
GeneralPurposeProduction workloadsStandard_D2ds_v4, Standard_D4ds_v4
MemoryOptimizedHigh memory requirementsStandard_E2ds_v4, Standard_E4ds_v4

High Availability Modes

ModeDescription
DisabledNo HA (single server)
SameZoneHA within same availability zone
ZoneRedundantHA across availability zones

Best Practices

  1. Use Flexible Server — Single Server is deprecated
  2. Enable zone-redundant HA — For production workloads
  3. Use DefaultAzureCredential — Prefer over connection strings
  4. Configure Entra ID authentication — More secure than SQL auth
  5. Enable auto-grow storage — Prevents out-of-space issues
  6. Set appropriate backup retention — 7-35 days based on compliance
  7. Use private endpoints — For secure network access
  8. Tune server parameters — Based on workload characteristics
  9. Monitor with Azure Monitor — Enable metrics and logs
  10. Stop dev/test servers — Save costs when not in use

Error Handling

csharp
using Azure;
try{    ArmOperation<MySqlFlexibleServerResource> operation = await servers        .CreateOrUpdateAsync(WaitUntil.Completed, "my-mysql", data);}catch (RequestFailedException ex) when (ex.Status == 409){    Console.WriteLine("Server already exists");}catch (RequestFailedException ex) when (ex.Status == 400){    Console.WriteLine($"Invalid configuration: {ex.Message}");}catch (RequestFailedException ex){    Console.WriteLine($"Azure error: {ex.Status} - {ex.Message}");}

Connection String

After creating the server, connect using:

csharp
// ADO.NET connection stringstring connectionString = $"Server={server.Data.FullyQualifiedDomainName};" +    "Database=myappdb;" +    "User Id=mysqladmin;" +    "Password=YourSecurePassword123!;" +    "SslMode=Required;";
// With Entra ID token (recommended)var credential = new DefaultAzureCredential();var token = await credential.GetTokenAsync(    new TokenRequestContext(new[] { "https://ossrdbms-aad.database.windows.net/.default" }));
string connectionString = $"Server={server.Data.FullyQualifiedDomainName};" +    "Database=myappdb;" +    $"User [email protected];" +    $"Password={token.Token};" +    "SslMode=Required;";

Related SDKs

SDKPurposeInstall
Azure.ResourceManager.MySqlMySQL management (this SDK)dotnet add package Azure.ResourceManager.MySql
Azure.ResourceManager.PostgreSqlPostgreSQL managementdotnet add package Azure.ResourceManager.PostgreSql
MySqlConnectorMySQL data accessdotnet add package MySqlConnector

Reference Links

来源与署名

来源:microsoft/skills位于.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-mysql-dotnet提交354361d

许可证: MIT

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架