[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7180B7YNJ24H04N25MBQ3NP":3,"skill-same:01M7180B7YNJ24H04N25MBQ3NP":65},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":14,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":50,"install":51,"resources":64},"01M7180B7YNJ24H04N25MBQ3NP","azure-resource-manager-mysql-dotnet",null,"Azure MySQL Flexible Server SDK for .NET. Database management for MySQL Flexible Server deployments.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fazure-resource-manager-mysql-dotnet\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"dotnet","azure","azure resource manager mysql dotnet","mysql","azure resource manager","manager","sdk","database","server","management","deployments","community","for","unknown","2026","2026-11-10 10:12:30",false,"---\nname: azure-resource-manager-mysql-dotnet\ndescription: Azure MySQL Flexible Server SDK for .NET. Database management for MySQL Flexible Server deployments.\nrisk: unknown\nsource: community\ndate_added: '2026-02-27'\n---\n\n# Azure.ResourceManager.MySql (.NET)\n\nAzure Resource Manager SDK for managing MySQL Flexible Server deployments.\n\n## Installation\n\n```bash\ndotnet add package Azure.ResourceManager.MySql\ndotnet add package Azure.Identity\n```\n\n**Current Version**: v1.2.0 (GA)  \n**API Version**: 2023-12-30\n\n> **Note**: This skill focuses on MySQL Flexible Server. Single Server is deprecated and scheduled for retirement.\n\n## Environment Variables\n\n```bash\nAZURE_SUBSCRIPTION_ID=\u003Cyour-subscription-id>\nAZURE_RESOURCE_GROUP=\u003Cyour-resource-group>\nAZURE_MYSQL_SERVER_NAME=\u003Cyour-mysql-server>\n```\n\n## Authentication\n\n```csharp\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.MySql;\nusing Azure.ResourceManager.MySql.FlexibleServers;\n\nArmClient client = new ArmClient(new DefaultAzureCredential());\n```\n\n## Resource Hierarchy\n\n```\nSubscription\n└── ResourceGroup\n    └── MySqlFlexibleServer                 # MySQL Flexible Server instance\n        ├── MySqlFlexibleServerDatabase     # Database within the server\n        ├── MySqlFlexibleServerFirewallRule # IP firewall rules\n        ├── MySqlFlexibleServerConfiguration # Server parameters\n        ├── MySqlFlexibleServerBackup       # Backup information\n        ├── MySqlFlexibleServerMaintenanceWindow # Maintenance schedule\n        └── MySqlFlexibleServerAadAdministrator # Entra ID admin\n```\n\n## Core Workflows\n\n### 1. Create MySQL Flexible Server\n\n```csharp\nusing Azure.ResourceManager.MySql.FlexibleServers;\nusing Azure.ResourceManager.MySql.FlexibleServers.Models;\n\nResourceGroupResource resourceGroup = await client\n    .GetDefaultSubscriptionAsync()\n    .Result\n    .GetResourceGroupAsync(\"my-resource-group\");\n\nMySqlFlexibleServerCollection servers = resourceGroup.GetMySqlFlexibleServers();\n\nMySqlFlexibleServerData data = new MySqlFlexibleServerData(AzureLocation.EastUS)\n{\n    Sku = new MySqlFlexibleServerSku(\"Standard_D2ds_v4\", MySqlFlexibleServerSkuTier.GeneralPurpose),\n    AdministratorLogin = \"mysqladmin\",\n    AdministratorLoginPassword = \"YourSecurePassword123!\",\n    Version = MySqlFlexibleServerVersion.Ver8_0_21,\n    Storage = new MySqlFlexibleServerStorage\n    {\n        StorageSizeInGB = 128,\n        AutoGrow = MySqlFlexibleServerEnableStatusEnum.Enabled,\n        Iops = 3000\n    },\n    Backup = new MySqlFlexibleServerBackupProperties\n    {\n        BackupRetentionDays = 7,\n        GeoRedundantBackup = MySqlFlexibleServerEnableStatusEnum.Disabled\n    },\n    HighAvailability = new MySqlFlexibleServerHighAvailability\n    {\n        Mode = MySqlFlexibleServerHighAvailabilityMode.ZoneRedundant,\n        StandbyAvailabilityZone = \"2\"\n    },\n    AvailabilityZone = \"1\"\n};\n\nArmOperation\u003CMySqlFlexibleServerResource> operation = await servers\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"my-mysql-server\", data);\n\nMySqlFlexibleServerResource server = operation.Value;\nConsole.WriteLine($\"Server created: {server.Data.FullyQualifiedDomainName}\");\n```\n\n### 2. Create Database\n\n```csharp\nMySqlFlexibleServerResource server = await resourceGroup\n    .GetMySqlFlexibleServerAsync(\"my-mysql-server\");\n\nMySqlFlexibleServerDatabaseCollection databases = server.GetMySqlFlexibleServerDatabases();\n\nMySqlFlexibleServerDatabaseData dbData = new MySqlFlexibleServerDatabaseData\n{\n    Charset = \"utf8mb4\",\n    Collation = \"utf8mb4_unicode_ci\"\n};\n\nArmOperation\u003CMySqlFlexibleServerDatabaseResource> operation = await databases\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"myappdb\", dbData);\n\nMySqlFlexibleServerDatabaseResource database = operation.Value;\nConsole.WriteLine($\"Database created: {database.Data.Name}\");\n```\n\n### 3. Configure Firewall Rules\n\n```csharp\nMySqlFlexibleServerFirewallRuleCollection firewallRules = server.GetMySqlFlexibleServerFirewallRules();\n\n\u002F\u002F Allow specific IP range\nMySqlFlexibleServerFirewallRuleData ruleData = new MySqlFlexibleServerFirewallRuleData\n{\n    StartIPAddress = System.Net.IPAddress.Parse(\"10.0.0.1\"),\n    EndIPAddress = System.Net.IPAddress.Parse(\"10.0.0.255\")\n};\n\nArmOperation\u003CMySqlFlexibleServerFirewallRuleResource> operation = await firewallRules\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"allow-internal\", ruleData);\n\n\u002F\u002F Allow Azure services\nMySqlFlexibleServerFirewallRuleData azureServicesRule = new MySqlFlexibleServerFirewallRuleData\n{\n    StartIPAddress = System.Net.IPAddress.Parse(\"0.0.0.0\"),\n    EndIPAddress = System.Net.IPAddress.Parse(\"0.0.0.0\")\n};\n\nawait firewallRules.CreateOrUpdateAsync(WaitUntil.Completed, \"AllowAllAzureServicesAndResourcesWithinAzureIps\", azureServicesRule);\n```\n\n### 4. Update Server Configuration\n\n```csharp\nMySqlFlexibleServerConfigurationCollection configurations = server.GetMySqlFlexibleServerConfigurations();\n\n\u002F\u002F Get current configuration\nMySqlFlexibleServerConfigurationResource config = await configurations\n    .GetAsync(\"max_connections\");\n\n\u002F\u002F Update configuration\nMySqlFlexibleServerConfigurationData configData = new MySqlFlexibleServerConfigurationData\n{\n    Value = \"500\",\n    Source = MySqlFlexibleServerConfigurationSource.UserOverride\n};\n\nArmOperation\u003CMySqlFlexibleServerConfigurationResource> operation = await configurations\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"max_connections\", configData);\n\n\u002F\u002F Common configurations to tune\nstring[] commonParams = { \"max_connections\", \"innodb_buffer_pool_size\", \"slow_query_log\", \"long_query_time\" };\n```\n\n### 5. Configure Entra ID Administrator\n\n```csharp\nMySqlFlexibleServerAadAdministratorCollection admins = server.GetMySqlFlexibleServerAadAdministrators();\n\nMySqlFlexibleServerAadAdministratorData adminData = new MySqlFlexibleServerAadAdministratorData\n{\n    AdministratorType = MySqlFlexibleServerAdministratorType.ActiveDirectory,\n    Login = \"aad-admin@contoso.com\",\n    Sid = Guid.Parse(\"\u003Centra-object-id>\"),\n    TenantId = Guid.Parse(\"\u003Ctenant-id>\"),\n    IdentityResourceId = new ResourceIdentifier(\"\u002Fsubscriptions\u002F...\u002FuserAssignedIdentities\u002Fmysql-identity\")\n};\n\nArmOperation\u003CMySqlFlexibleServerAadAdministratorResource> operation = await admins\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"ActiveDirectory\", adminData);\n```\n\n### 6. List and Manage Servers\n\n```csharp\n\u002F\u002F List servers in resource group\nawait foreach (MySqlFlexibleServerResource server in resourceGroup.GetMySqlFlexibleServers())\n{\n    Console.WriteLine($\"Server: {server.Data.Name}\");\n    Console.WriteLine($\"  FQDN: {server.Data.FullyQualifiedDomainName}\");\n    Console.WriteLine($\"  Version: {server.Data.Version}\");\n    Console.WriteLine($\"  State: {server.Data.State}\");\n    Console.WriteLine($\"  SKU: {server.Data.Sku.Name} ({server.Data.Sku.Tier})\");\n}\n\n\u002F\u002F List databases in server\nawait foreach (MySqlFlexibleServerDatabaseResource db in server.GetMySqlFlexibleServerDatabases())\n{\n    Console.WriteLine($\"Database: {db.Data.Name}\");\n}\n```\n\n### 7. Backup and Restore\n\n```csharp\n\u002F\u002F List available backups\nawait foreach (MySqlFlexibleServerBackupResource backup in server.GetMySqlFlexibleServerBackups())\n{\n    Console.WriteLine($\"Backup: {backup.Data.Name}\");\n    Console.WriteLine($\"  Type: {backup.Data.BackupType}\");\n    Console.WriteLine($\"  Completed: {backup.Data.CompletedOn}\");\n}\n\n\u002F\u002F Point-in-time restore\nMySqlFlexibleServerData restoreData = new MySqlFlexibleServerData(AzureLocation.EastUS)\n{\n    CreateMode = MySqlFlexibleServerCreateMode.PointInTimeRestore,\n    SourceServerResourceId = server.Id,\n    RestorePointInTime = DateTimeOffset.UtcNow.AddHours(-2)\n};\n\nArmOperation\u003CMySqlFlexibleServerResource> operation = await servers\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"my-mysql-restored\", restoreData);\n```\n\n### 8. Stop and Start Server\n\n```csharp\nMySqlFlexibleServerResource server = await resourceGroup\n    .GetMySqlFlexibleServerAsync(\"my-mysql-server\");\n\n\u002F\u002F Stop server (saves costs when not in use)\nawait server.StopAsync(WaitUntil.Completed);\n\n\u002F\u002F Start server\nawait server.StartAsync(WaitUntil.Completed);\n\n\u002F\u002F Restart server\nawait server.RestartAsync(WaitUntil.Completed, new MySqlFlexibleServerRestartParameter\n{\n    RestartWithFailover = MySqlFlexibleServerEnableStatusEnum.Enabled,\n    MaxFailoverSeconds = 60\n});\n```\n\n### 9. Update Server (Scale)\n\n```csharp\nMySqlFlexibleServerResource server = await resourceGroup\n    .GetMySqlFlexibleServerAsync(\"my-mysql-server\");\n\nMySqlFlexibleServerPatch patch = new MySqlFlexibleServerPatch\n{\n    Sku = new MySqlFlexibleServerSku(\"Standard_D4ds_v4\", MySqlFlexibleServerSkuTier.GeneralPurpose),\n    Storage = new MySqlFlexibleServerStorage\n    {\n        StorageSizeInGB = 256,\n        Iops = 6000\n    }\n};\n\nArmOperation\u003CMySqlFlexibleServerResource> operation = await server\n    .UpdateAsync(WaitUntil.Completed, patch);\n```\n\n### 10. Delete Server\n\n```csharp\nMySqlFlexibleServerResource server = await resourceGroup\n    .GetMySqlFlexibleServerAsync(\"my-mysql-server\");\n\nawait server.DeleteAsync(WaitUntil.Completed);\n```\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `MySqlFlexibleServerResource` | Flexible Server instance |\n| `MySqlFlexibleServerData` | Server configuration data |\n| `MySqlFlexibleServerCollection` | Collection of servers |\n| `MySqlFlexibleServerDatabaseResource` | Database within server |\n| `MySqlFlexibleServerFirewallRuleResource` | IP firewall rule |\n| `MySqlFlexibleServerConfigurationResource` | Server parameter |\n| `MySqlFlexibleServerBackupResource` | Backup metadata |\n| `MySqlFlexibleServerAadAdministratorResource` | Entra ID admin |\n| `MySqlFlexibleServerSku` | SKU (compute tier + size) |\n| `MySqlFlexibleServerStorage` | Storage configuration |\n| `MySqlFlexibleServerHighAvailability` | HA configuration |\n| `MySqlFlexibleServerBackupProperties` | Backup settings |\n\n## SKU Tiers\n\n| Tier | Use Case | SKU Examples |\n|------|----------|--------------|\n| `Burstable` | Dev\u002Ftest, light workloads | Standard_B1ms, Standard_B2s |\n| `GeneralPurpose` | Production workloads | Standard_D2ds_v4, Standard_D4ds_v4 |\n| `MemoryOptimized` | High memory requirements | Standard_E2ds_v4, Standard_E4ds_v4 |\n\n## High Availability Modes\n\n| Mode | Description |\n|------|-------------|\n| `Disabled` | No HA (single server) |\n| `SameZone` | HA within same availability zone |\n| `ZoneRedundant` | HA across availability zones |\n\n## Best Practices\n\n1. **Use Flexible Server** — Single Server is deprecated\n2. **Enable zone-redundant HA** — For production workloads\n3. **Use DefaultAzureCredential** — Prefer over connection strings\n4. **Configure Entra ID authentication** — More secure than SQL auth\n5. **Enable auto-grow storage** — Prevents out-of-space issues\n6. **Set appropriate backup retention** — 7-35 days based on compliance\n7. **Use private endpoints** — For secure network access\n8. **Tune server parameters** — Based on workload characteristics\n9. **Monitor with Azure Monitor** — Enable metrics and logs\n10. **Stop dev\u002Ftest servers** — Save costs when not in use\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    ArmOperation\u003CMySqlFlexibleServerResource> operation = await servers\n        .CreateOrUpdateAsync(WaitUntil.Completed, \"my-mysql\", data);\n}\ncatch (RequestFailedException ex) when (ex.Status == 409)\n{\n    Console.WriteLine(\"Server already exists\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 400)\n{\n    Console.WriteLine($\"Invalid configuration: {ex.Message}\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"Azure error: {ex.Status} - {ex.Message}\");\n}\n```\n\n## Connection String\n\nAfter creating the server, connect using:\n\n```csharp\n\u002F\u002F ADO.NET connection string\nstring connectionString = $\"Server={server.Data.FullyQualifiedDomainName};\" +\n    \"Database=myappdb;\" +\n    \"User Id=mysqladmin;\" +\n    \"Password=YourSecurePassword123!;\" +\n    \"SslMode=Required;\";\n\n\u002F\u002F With Entra ID token (recommended)\nvar credential = new DefaultAzureCredential();\nvar token = await credential.GetTokenAsync(\n    new TokenRequestContext(new[] { \"https:\u002F\u002Fossrdbms-aad.database.windows.net\u002F.default\" }));\n\nstring connectionString = $\"Server={server.Data.FullyQualifiedDomainName};\" +\n    \"Database=myappdb;\" +\n    $\"User Id=aad-admin@contoso.com;\" +\n    $\"Password={token.Token};\" +\n    \"SslMode=Required;\";\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.ResourceManager.MySql` | MySQL management (this SDK) | `dotnet add package Azure.ResourceManager.MySql` |\n| `Azure.ResourceManager.PostgreSql` | PostgreSQL management | `dotnet add package Azure.ResourceManager.PostgreSql` |\n| `MySqlConnector` | MySQL data access | `dotnet add package MySqlConnector` |\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| NuGet Package | https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FAzure.ResourceManager.MySql |\n| API Reference | https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Fazure.resourcemanager.mysql |\n| Product Documentation | https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Fmysql\u002Fflexible-server\u002F |\n| GitHub Source | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Ftree\u002Fmain\u002Fsdk\u002Fmysql\u002FAzure.ResourceManager.MySql |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Azure.ResourceManager.MySql (.NET)\n\nAzure Resource Manager SDK for managing MySQL Flexible Server deployments.\n\n## Installation\n\n```bash\ndotnet add package Azure.ResourceManager.MySql\ndotnet add package Azure.Identity\n```\n\n**Current Version**: v1.2.0 (GA)  \n**API Version**: 2023-12-30\n\n> **Note**: This skill focuses on MySQL Flexible Server. Single Server is deprecated and scheduled for retirement.\n\n## Environment Variables\n\n```bash\nAZURE_SUBSCRIPTION_ID=\u003Cyour-subscription-id>\nAZURE_RESOURCE_GROUP=\u003Cyour-resource-group>\nAZURE_MYSQL_SERVER_NAME=\u003Cyour-mysql-server>\n```\n\n## Authentication\n\n```csharp\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.MySql;\nusing Azure.ResourceManager.MySql.FlexibleServers;\n\nArmClient client = new ArmClient(new DefaultAzureCredential());\n```\n\n## Resource Hierarchy\n\n```\nSubscription\n└── ResourceGroup\n    └── MySqlFlexibleServer                 # MySQL Flexible Server instance\n        ├── MySqlFlexibleServerDatabase     # Database within the server\n        ├── MySqlFlexibleServerFirewallRule # IP firewall rules\n        ├── MySqlFlexibleServerConfiguration # Server parameters\n        ├── MySqlFlexibleServerBackup       # Backup information\n        ├── MySqlFlexibleServerMaintenanceWindow # Maintenance schedule\n        └── MySqlFlexibleServerAadAdministrator # Entra ID admin\n```\n\n## Core Workflows\n\n### 1. Create MySQL Flexible Server\n\n```csharp\nusing Azure.ResourceManager.MySql.FlexibleServers;\nusing Azure.ResourceManager.MySql.FlexibleServers.Models;\n\nResourceGroupResource resourceGroup = await client\n    .GetDefaultSubscriptionAsync()\n    .Result\n    .GetResourceGroupAsync(\"my-resource-group\");\n\nMySqlFlexibleServerCollection servers = resourceGroup.GetMySqlFlexibleServers();\n\nMySqlFlexibleServerData data = new MySqlFlexibleServerData(AzureLocation.EastUS)\n{\n    Sku = new MySqlFlexibleServerSku(\"Standard_D2ds_v4\", MySqlFlexibleServerSkuTier.GeneralPurpose),\n    AdministratorLogin = \"mysqladmin\",\n    AdministratorLoginPassword = \"YourSecurePassword123!\",\n    Version = MySqlFlexibleServerVersion.Ver8_0_21,\n    Storage = new MySqlFlexibleServerStorage\n    {\n        StorageSizeInGB = 128,\n        AutoGrow = MySqlFlexibleServerEnableStatusEnum.Enabled,\n        Iops = 3000\n    },\n    Backup = new MySqlFlexibleServerBackupProperties\n    {\n        BackupRetentionDays = 7,\n        GeoRedundantBackup = MySqlFlexibleServerEnableStatusEnum.Disabled\n    },\n    HighAvailability = new MySqlFlexibleServerHighAvailability\n    {\n        Mode = MySqlFlexibleServerHighAvailabilityMode.ZoneRedundant,\n        StandbyAvailabilityZone = \"2\"\n    },\n    AvailabilityZone = \"1\"\n};\n\nArmOperation\u003CMySqlFlexibleServerResource> operation = await servers\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"my-mysql-server\", data);\n\nMySqlFlexibleServerResource server = operation.Value;\nConsole.WriteLine($\"Server created: {server.Data.FullyQualifiedDomainName}\");\n```\n\n### 2. Create Database\n\n```csharp\nMySqlFlexibleServerResource server = await resourceGroup\n    .GetMySqlFlexibleServerAsync(\"my-mysql-server\");\n\nMySqlFlexibleServerDatabaseCollection databases = server.GetMySqlFlexibleServerDatabases();\n\nMySqlFlexibleServerDatabaseData dbData = new MySqlFlexibleServerDatabaseData\n{\n    Charset = \"utf8mb4\",\n    Collation = \"utf8mb4_unicode_ci\"\n};\n\nArmOperation\u003CMySqlFlexibleServerDatabaseResource> operation = await databases\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"myappdb\", dbData);\n\nMySqlFlexibleServerDatabaseResource database = operation.Value;\nConsole.WriteLine($\"Database created: {database.Data.Name}\");\n```\n\n### 3. Configure Firewall Rules\n\n```csharp\nMySqlFlexibleServerFirewallRuleCollection firewallRules = server.GetMySqlFlexibleServerFirewallRules();\n\n\u002F\u002F Allow specific IP range\nMySqlFlexibleServerFirewallRuleData ruleData = new MySqlFlexibleServerFirewallRuleData\n{\n    StartIPAddress = System.Net.IPAddress.Parse(\"10.0.0.1\"),\n    EndIPAddress = System.Net.IPAddress.Parse(\"10.0.0.255\")\n};\n\nArmOperation\u003CMySqlFlexibleServerFirewallRuleResource> operation = await firewallRules\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"allow-internal\", ruleData);\n\n\u002F\u002F Allow Azure services\nMySqlFlexibleServerFirewallRuleData azureServicesRule = new MySqlFlexibleServerFirewallRuleData\n{\n    StartIPAddress = System.Net.IPAddress.Parse(\"0.0.0.0\"),\n    EndIPAddress = System.Net.IPAddress.Parse(\"0.0.0.0\")\n};\n\nawait firewallRules.CreateOrUpdateAsync(WaitUntil.Completed, \"AllowAllAzureServicesAndResourcesWithinAzureIps\", azureServicesRule);\n```\n\n### 4. Update Server Configuration\n\n```csharp\nMySqlFlexibleServerConfigurationCollection configurations = server.GetMySqlFlexibleServerConfigurations();\n\n\u002F\u002F Get current configuration\nMySqlFlexibleServerConfigurationResource config = await configurations\n    .GetAsync(\"max_connections\");\n\n\u002F\u002F Update configuration\nMySqlFlexibleServerConfigurationData configData = new MySqlFlexibleServerConfigurationData\n{\n    Value = \"500\",\n    Source = MySqlFlexibleServerConfigurationSource.UserOverride\n};\n\nArmOperation\u003CMySqlFlexibleServerConfigurationResource> operation = await configurations\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"max_connections\", configData);\n\n\u002F\u002F Common configurations to tune\nstring[] commonParams = { \"max_connections\", \"innodb_buffer_pool_size\", \"slow_query_log\", \"long_query_time\" };\n```\n\n### 5. Configure Entra ID Administrator\n\n```csharp\nMySqlFlexibleServerAadAdministratorCollection admins = server.GetMySqlFlexibleServerAadAdministrators();\n\nMySqlFlexibleServerAadAdministratorData adminData = new MySqlFlexibleServerAadAdministratorData\n{\n    AdministratorType = MySqlFlexibleServerAdministratorType.ActiveDirectory,\n    Login = \"aad-admin@contoso.com\",\n    Sid = Guid.Parse(\"\u003Centra-object-id>\"),\n    TenantId = Guid.Parse(\"\u003Ctenant-id>\"),\n    IdentityResourceId = new ResourceIdentifier(\"\u002Fsubscriptions\u002F...\u002FuserAssignedIdentities\u002Fmysql-identity\")\n};\n\nArmOperation\u003CMySqlFlexibleServerAadAdministratorResource> operation = await admins\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"ActiveDirectory\", adminData);\n```\n\n### 6. List and Manage Servers\n\n```csharp\n\u002F\u002F List servers in resource group\nawait foreach (MySqlFlexibleServerResource server in resourceGroup.GetMySqlFlexibleServers())\n{\n    Console.WriteLine($\"Server: {server.Data.Name}\");\n    Console.WriteLine($\"  FQDN: {server.Data.FullyQualifiedDomainName}\");\n    Console.WriteLine($\"  Version: {server.Data.Version}\");\n    Console.WriteLine($\"  State: {server.Data.State}\");\n    Console.WriteLine($\"  SKU: {server.Data.Sku.Name} ({server.Data.Sku.Tier})\");\n}\n\n\u002F\u002F List databases in server\nawait foreach (MySqlFlexibleServerDatabaseResource db in server.GetMySqlFlexibleServerDatabases())\n{\n    Console.WriteLine($\"Database: {db.Data.Name}\");\n}\n```\n\n### 7. Backup and Restore\n\n```csharp\n\u002F\u002F List available backups\nawait foreach (MySqlFlexibleServerBackupResource backup in server.GetMySqlFlexibleServerBackups())\n{\n    Console.WriteLine($\"Backup: {backup.Data.Name}\");\n    Console.WriteLine($\"  Type: {backup.Data.BackupType}\");\n    Console.WriteLine($\"  Completed: {backup.Data.CompletedOn}\");\n}\n\n\u002F\u002F Point-in-time restore\nMySqlFlexibleServerData restoreData = new MySqlFlexibleServerData(AzureLocation.EastUS)\n{\n    CreateMode = MySqlFlexibleServerCreateMode.PointInTimeRestore,\n    SourceServerResourceId = server.Id,\n    RestorePointInTime = DateTimeOffset.UtcNow.AddHours(-2)\n};\n\nArmOperation\u003CMySqlFlexibleServerResource> operation = await servers\n    .CreateOrUpdateAsync(WaitUntil.Completed, \"my-mysql-restored\", restoreData);\n```\n\n### 8. Stop and Start Server\n\n```csharp\nMySqlFlexibleServerResource server = await resourceGroup\n    .GetMySqlFlexibleServerAsync(\"my-mysql-server\");\n\n\u002F\u002F Stop server (saves costs when not in use)\nawait server.StopAsync(WaitUntil.Completed);\n\n\u002F\u002F Start server\nawait server.StartAsync(WaitUntil.Completed);\n\n\u002F\u002F Restart server\nawait server.RestartAsync(WaitUntil.Completed, new MySqlFlexibleServerRestartParameter\n{\n    RestartWithFailover = MySqlFlexibleServerEnableStatusEnum.Enabled,\n    MaxFailoverSeconds = 60\n});\n```\n\n### 9. Update Server (Scale)\n\n```csharp\nMySqlFlexibleServerResource server = await resourceGroup\n    .GetMySqlFlexibleServerAsync(\"my-mysql-server\");\n\nMySqlFlexibleServerPatch patch = new MySqlFlexibleServerPatch\n{\n    Sku = new MySqlFlexibleServerSku(\"Standard_D4ds_v4\", MySqlFlexibleServerSkuTier.GeneralPurpose),\n    Storage = new MySqlFlexibleServerStorage\n    {\n        StorageSizeInGB = 256,\n        Iops = 6000\n    }\n};\n\nArmOperation\u003CMySqlFlexibleServerResource> operation = await server\n    .UpdateAsync(WaitUntil.Completed, patch);\n```\n\n### 10. Delete Server\n\n```csharp\nMySqlFlexibleServerResource server = await resourceGroup\n    .GetMySqlFlexibleServerAsync(\"my-mysql-server\");\n\nawait server.DeleteAsync(WaitUntil.Completed);\n```\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `MySqlFlexibleServerResource` | Flexible Server instance |\n| `MySqlFlexibleServerData` | Server configuration data |\n| `MySqlFlexibleServerCollection` | Collection of servers |\n| `MySqlFlexibleServerDatabaseResource` | Database within server |\n| `MySqlFlexibleServerFirewallRuleResource` | IP firewall rule |\n| `MySqlFlexibleServerConfigurationResource` | Server parameter |\n| `MySqlFlexibleServerBackupResource` | Backup metadata |\n| `MySqlFlexibleServerAadAdministratorResource` | Entra ID admin |\n| `MySqlFlexibleServerSku` | SKU (compute tier + size) |\n| `MySqlFlexibleServerStorage` | Storage configuration |\n| `MySqlFlexibleServerHighAvailability` | HA configuration |\n| `MySqlFlexibleServerBackupProperties` | Backup settings |\n\n## SKU Tiers\n\n| Tier | Use Case | SKU Examples |\n|------|----------|--------------|\n| `Burstable` | Dev\u002Ftest, light workloads | Standard_B1ms, Standard_B2s |\n| `GeneralPurpose` | Production workloads | Standard_D2ds_v4, Standard_D4ds_v4 |\n| `MemoryOptimized` | High memory requirements | Standard_E2ds_v4, Standard_E4ds_v4 |\n\n## High Availability Modes\n\n| Mode | Description |\n|------|-------------|\n| `Disabled` | No HA (single server) |\n| `SameZone` | HA within same availability zone |\n| `ZoneRedundant` | HA across availability zones |\n\n## Best Practices\n\n1. **Use Flexible Server** — Single Server is deprecated\n2. **Enable zone-redundant HA** — For production workloads\n3. **Use DefaultAzureCredential** — Prefer over connection strings\n4. **Configure Entra ID authentication** — More secure than SQL auth\n5. **Enable auto-grow storage** — Prevents out-of-space issues\n6. **Set appropriate backup retention** — 7-35 days based on compliance\n7. **Use private endpoints** — For secure network access\n8. **Tune server parameters** — Based on workload characteristics\n9. **Monitor with Azure Monitor** — Enable metrics and logs\n10. **Stop dev\u002Ftest servers** — Save costs when not in use\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    ArmOperation\u003CMySqlFlexibleServerResource> operation = await servers\n        .CreateOrUpdateAsync(WaitUntil.Completed, \"my-mysql\", data);\n}\ncatch (RequestFailedException ex) when (ex.Status == 409)\n{\n    Console.WriteLine(\"Server already exists\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 400)\n{\n    Console.WriteLine($\"Invalid configuration: {ex.Message}\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"Azure error: {ex.Status} - {ex.Message}\");\n}\n```\n\n## Connection String\n\nAfter creating the server, connect using:\n\n```csharp\n\u002F\u002F ADO.NET connection string\nstring connectionString = $\"Server={server.Data.FullyQualifiedDomainName};\" +\n    \"Database=myappdb;\" +\n    \"User Id=mysqladmin;\" +\n    \"Password=YourSecurePassword123!;\" +\n    \"SslMode=Required;\";\n\n\u002F\u002F With Entra ID token (recommended)\nvar credential = new DefaultAzureCredential();\nvar token = await credential.GetTokenAsync(\n    new TokenRequestContext(new[] { \"https:\u002F\u002Fossrdbms-aad.database.windows.net\u002F.default\" }));\n\nstring connectionString = $\"Server={server.Data.FullyQualifiedDomainName};\" +\n    \"Database=myappdb;\" +\n    $\"User Id=aad-admin@contoso.com;\" +\n    $\"Password={token.Token};\" +\n    \"SslMode=Required;\";\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.ResourceManager.MySql` | MySQL management (this SDK) | `dotnet add package Azure.ResourceManager.MySql` |\n| `Azure.ResourceManager.PostgreSql` | PostgreSQL management | `dotnet add package Azure.ResourceManager.PostgreSql` |\n| `MySqlConnector` | MySQL data access | `dotnet add package MySqlConnector` |\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| NuGet Package | https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FAzure.ResourceManager.MySql |\n| API Reference | https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Fazure.resourcemanager.mysql |\n| Product Documentation | https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Fmysql\u002Fflexible-server\u002F |\n| GitHub Source | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Ftree\u002Fmain\u002Fsdk\u002Fmysql\u002FAzure.ResourceManager.MySql |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":37,"source":35,"date_added":44,"description":7},"2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fglobal\u002Fazure-resource-manager-mysql-dotnet","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill azure-resource-manager-mysql-dotnet",{"tool":57,"command":58},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill azure-resource-manager-mysql-dotnet",{"tool":60,"command":61},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill azure-resource-manager-mysql-dotnet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fazure-resource-manager-mysql-dotnet\u002FSKILL.md",true,[],[66,76,83,91,97,105],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":70,"licenseFileUrl":71,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":75},"01M72R8PZX1ABFHJGTYPA4CAF1","webapp-testing","To test local web applications, write native Python Playwright scripts.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fwebapp-testing\u002FSKILL.md",[],[],"2026-11-10 22:39:42",{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":75},"01M72QG37MMZNDY7X7GXPAK5W6","python-packaging","Comprehensive guide to creating, structuring, and distributing Python packages using modern packaging tools, pyproject.toml, and publishing to PyPI.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fpython-packaging\u002FSKILL.md",[],[],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":70,"licenseFileUrl":87,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":75},"01M72NXR0QMP9G46TW6A2DH59C","canvas-design","These are instructions for creating design philosophies - aesthetic movements that are then EXPRESSED VISUALLY. Output only .md files, .pdf files, and .png files.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fcanvas-design\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fglobal\u002Fcanvas-design\u002FSKILL.md",[],[],{"skillNo":92,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":70,"licenseFileUrl":93,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":75},"01M72N55TK3EEQ4QK4AWDC2KZS","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Fwebapp-testing\u002FSKILL.md",[],[],{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":70,"licenseFileUrl":101,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":75},"01M72MTWC150CFAP4Y5GSNKF80","slack-gif-creator","A toolkit providing utilities and knowledge for creating animated GIFs optimized for Slack.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Fslack-gif-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Fslack-gif-creator\u002FSKILL.md",[],[],{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":70,"licenseFileUrl":109,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":75},"01M72KPT3VVNSP88MNAY466TZT","frontend-design","You are a frontend designer-engineer, not a layout generator.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Ffrontend-design\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Ffrontend-design\u002FSKILL.md",[],[]]