Azure Resource Manager Mysql Dotnet

by microsoft354361d83247MITListed Oct 8, 2026Updated Oct 8, 2026

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".

FeaturedInstructions onlyDevOps & CloudSoftware Development
AI-generated overview

Guides .NET developers in managing Azure MySQL Flexible Server deployments with the Azure Resource Manager SDK.

What it does
This skill provides reference instructions and C# code samples for managing Azure Database for MySQL Flexible Server through the Azure.ResourceManager.MySql SDK for .NET. It covers creating servers and databases, configuring firewall rules and server parameters, setting up Entra ID administrators, backups and point-in-time restore, high availability, scaling, and start/stop/delete operations. It also lists key SDK types, SKU tiers, HA modes, best practices, error handling, and connection string patterns.
When to use it
Use it when writing .NET code that provisions or operates Azure MySQL Flexible Server resources, such as creating a server, adding a database, opening firewall rules, tuning parameters, or restoring from backup. It suits infrastructure management tasks performed through the Azure Resource Manager SDK rather than application data access.
Requirements
Requires the .NET SDK with the Azure.ResourceManager.MySql and Azure.Identity NuGet packages, an Azure subscription, a resource group, and credentials (DefaultAzureCredential or a specific credential such as ManagedIdentityCredential). Environment variables for subscription ID, resource group, and server name are used. Network access to Azure is needed. No scripts are shipped; it is instructions and code samples only.

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

Source and attribution

Source:microsoft/skillsin.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-mysql-dotnetat commit354361d

License: MIT

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal