azure-resource-manager-mysql-dotnet
microsoft/skills
使用 .NET SDK 管理 Azure MySQL Flexible Server 的部署。建立伺服器、資料庫、防火牆規則、設定、備份,並設定高可用性。
...展開全部Azure.ResourceManager.MySql (.NET)
用於管理 MySQL Flexible Server 部署的 Azure Resource Manager SDK。
安裝
dotnet add package Azure.ResourceManager.MySql
dotnet add package Azure.Identity
當前版本:v1.2.0 (GA)
API 版本:2023-12-30
注意:此技能專注於 MySQL Flexible Server。「單一伺服器」模式已停用,並預計將正式停用。
環境變數
AZURE_SUBSCRIPTION_ID= # 必填:Azure 訂閱 ID
AZURE_RESOURCE_GROUP= # 必填:資源群組名稱
AZURE_MYSQL_SERVER_NAME= # 必填:MySQL Flexible Server 名稱
AZURE_TOKEN_CREDENTIALS=prod # 僅當在生產環境中使用 DefaultAzureCredential 時才為必填
驗證
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.MySql;
using Azure.ResourceManager.MySql.FlexibleServers;
// 本地開發環境:使用 DefaultAzureCredential。 生產環境:設定 AZURE_TOKEN_CREDENTIALS=prod 或 AZURE_TOKEN_CREDENTIALS=
var credential = new DefaultAzureCredential(
DefaultAzureCredential.DefaultEnvironmentVariableName
);
// 或者在生產環境中直接使用特定憑證:
// 請參閱 https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes
// var credential = new ManagedIdentityCredential();
ArmClient client = new ArmClient(credential);
資源層級結構
訂閱
└── 資源群組
└── MySqlFlexibleServer # MySQL Flexible Server 執行個體
├── MySqlFlexibleServerDatabase # 伺服器內的資料庫
├── MySqlFlexibleServerFirewallRule # IP 防火牆規則
├── MySqlFlexibleServerConfiguration # 伺服器參數
├── MySqlFlexibleServerBackup # 備份資訊
├── MySqlFlexibleServerMaintenanceWindow # 維護時段
└── MySqlFlexibleServerAadAdministrator # Entra ID 管理員
核心工作流程
1. 建立 MySQL 彈性伺服器
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 operation = await servers
.CreateOrUpdateAsync(WaitUntil.Completed, "my-mysql-server", data);
MySqlFlexibleServerResource server = operation.Value;
Console.WriteLine($"伺服器已建立:{server.Data.FullyQualifiedDomainName}");
2. 建立資料庫
MySqlFlexibleServerResource 伺服器 = await 資源群組
.GetMySqlFlexibleServerAsync("my-mysql-server");
MySqlFlexibleServerDatabaseCollection 資料庫集合 = 伺服器.GetMySqlFlexibleServerDatabases();
MySqlFlexibleServerDatabaseData dbData = new MySqlFlexibleServerDatabaseData
{
Charset = "utf8mb4",
Collation = "utf8mb4_unicode_ci"
};
ArmOperation operation = await databases
.CreateOrUpdateAsync(WaitUntil.Completed, "myappdb", dbData);
MySqlFlexibleServerDatabaseResource database = operation.Value;
Console.WriteLine($"資料庫已建立:{database.Data.Name}");
3. 設定防火牆規則
MySqlFlexibleServerFirewallRuleCollection 防火牆規則集 firewallRules = 伺服器.GetMySqlFlexibleServerFirewallRules();
// 允許特定 IP 範圍
MySqlFlexibleServerFirewallRuleData 規則資料 ruleData = new MySqlFlexibleServerFirewallRuleData
{
StartIPAddress = System.Net.IPAddress.Parse("10.0.0.1"),
EndIPAddress = System.Net.IPAddress.Parse("10.0.0.255")
};
ArmOperation operation = await firewallRules
.CreateOrUpdateAsync(WaitUntil.Completed, "allow-internal", ruleData);
// 允許 Azure 服務存取
MySqlFlexibleServerFirewallRuleData 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. 更新伺服器設定
MySqlFlexibleServerConfigurationCollection configurations = server.GetMySqlFlexibleServerConfigurations();
// 取得當前設定
MySqlFlexibleServerConfigurationResource config = await configurations
.GetAsync("max_connections");
// 更新設定
MySqlFlexibleServerConfigurationData configData = new MySqlFlexibleServerConfigurationData
{
Value = "500",
Source = MySqlFlexibleServerConfigurationSource.UserOverride
};
ArmOperation operation = await configurations
.CreateOrUpdateAsync(WaitUntil.Completed, "max_connections", configData);
// 需調整的常用設定
string[] commonParams = { "max_connections", "innodb_buffer_pool_size", "slow_query_log", "long_query_time" };
5. 設定 Entra ID 管理員
MySqlFlexibleServerAadAdministratorCollection admins = server.GetMySqlFlexibleServerAadAdministrators();
MySqlFlexibleServerAadAdministratorData adminData = new MySqlFlexibleServerAadAdministratorData
{
AdministratorType = MySqlFlexibleServerAdministratorType.ActiveDirectory,
Login = "[email protected]",
Sid = Guid.Parse(""),
TenantId = Guid.Parse(""),
IdentityResourceId = new ResourceIdentifier("/subscriptions/.../userAssignedIdentities/mysql-identity")
};
ArmOperation operation = await admins
.CreateOrUpdateAsync(WaitUntil.Completed, "ActiveDirectory", adminData);
6. 列出與管理伺服器
// 列出資源群組中的伺服器
await foreach (MySqlFlexibleServerResource server in resourceGroup.GetMySqlFlexibleServers())
{
Console.WriteLine($"伺服器:{server.Data.Name}");
Console.WriteLine($" 完全合格的網域名稱 (FQDN):{server.Data.FullyQualifiedDomainName}");
Console.WriteLine($" 版本:{server.Data.Version}");
Console.WriteLine($" 狀態:{server.Data.State}");
Console.WriteLine($" SKU:{server.Data.Sku.Name} ({server.Data.Sku.Tier})");
}
// 列出伺服器中的資料庫
await foreach (MySqlFlexibleServerDatabaseResource db in server.GetMySqlFlexibleServerDatabases())
{
Console.WriteLine($"資料庫:{db.Data.Name}");
}
7. 備份與還原
// 列出可用的備份
await foreach (MySqlFlexibleServerBackupResource backup in server.GetMySqlFlexibleServerBackups())
{
Console.WriteLine($"備份:{backup.Data.Name}");
Console.WriteLine($" 類型:{backup.Data.BackupType}");
Console.WriteLine($" 完成時間:{backup.Data.CompletedOn}");
}
// 特定時間點還原
MySqlFlexibleServerData restoreData = new MySqlFlexibleServerData(AzureLocation.EastUS)
{
CreateMode = MySqlFlexibleServerCreateMode.PointInTimeRestore,
SourceServerResourceId = server.Id,
RestorePointInTime = DateTimeOffset.UtcNow.AddHours(-2)
};
ArmOperation operation = await servers
.CreateOrUpdateAsync(WaitUntil.Completed, "my-mysql-restored", restoreData);
8. 停止與啟動伺服器
MySqlFlexibleServerResource server = await resourceGroup
.GetMySqlFlexibleServerAsync("my-mysql-server");
// 停止伺服器(閒置時可節省成本)
await server.StopAsync(WaitUntil.Completed);
// 啟動伺服器
await server.StartAsync(WaitUntil.Completed);
// 重新啟動伺服器
await server.RestartAsync(WaitUntil.Completed, new MySqlFlexibleServerRestartParameter
{
RestartWithFailover = MySqlFlexibleServerEnableStatusEnum.Enabled,
MaxFailoverSeconds = 60
});
9. 更新伺服器(擴展)
MySqlFlexibleServerResource 伺服器 = await 資源群組
.GetMySqlFlexibleServerAsync("my-mysql-server");
MySqlFlexibleServerPatch patch = new MySqlFlexibleServerPatch
{
Sku = new MySqlFlexibleServerSku("Standard_D4ds_v4", MySqlFlexibleServerSkuTier.GeneralPurpose),
Storage = new MySqlFlexibleServerStorage
{
StorageSizeInGB = 256,
Iops = 6000
}
};
ArmOperation operation = await server
.UpdateAsync(WaitUntil.Completed, patch);
10. 刪除伺服器
MySqlFlexibleServerResource 伺服器 = await 資源群組
.GetMySqlFlexibleServerAsync("my-mysql-server");
await 伺服器.DeleteAsync(WaitUntil.Completed);
金鑰類型參考
| 類型 | 用途 |
|---|---|
MySqlFlexibleServerResource |
彈性伺服器實例 |
MySqlFlexibleServerData |
伺服器配置資料 |
MySqlFlexibleServerCollection |
伺服器集合 |
MySqlFlexibleServerDatabaseResource |
伺服器內的資料庫 |
MySqlFlexibleServerFirewallRuleResource |
IP 防火牆規則 |
MySqlFlexibleServerConfigurationResource |
伺服器參數 |
MySqlFlexibleServerBackupResource |
備份元資料 |
MySqlFlexibleServerAadAdministratorResource |
Entra ID 管理員 |
MySqlFlexibleServerSKU |
SKU(運算層級 + 容量) |
MySQL 彈性伺服器儲存 |
儲存配置 |
MySQL 彈性伺服器高可用性 |
高可用性 (HA) 配置 |
MySQL 彈性伺服器備份屬性 |
備份設定 |
SKU 等級
| 層級 | 使用案例 | SKU 範例 |
|---|---|---|
突發型 |
開發/測試、輕量工作負載 | Standard_B1ms、Standard_B2s |
通用用途 |
生產環境工作負載 | Standard_D2ds_v4、Standard_D4ds_v4 |
記憶體優化 |
高記憶體需求 | Standard_E2ds_v4、Standard_E4ds_v4 |
高可用性模式
| 模式 | 說明 |
|---|---|
已停用 |
無高可用性 (單一伺服器) |
同區域 |
同一可用區域內的高可用性 |
區域冗餘 |
跨可用區域的高可用性 |
最佳實務
- 使用「彈性伺服器」——「單一伺服器」已停用
- 啟用區域冗餘高可用性— 適用於生產環境工作負載
- 使用 DefaultAzureCredential— 優先於連線字串
- 設定 Entra ID 驗證— 比 SQL 驗證更安全
- 啟用儲存空間自動擴充— 防止空間不足的問題
- 設定適當的備份保留期限— 根據合規性要求設定為 7 至 35 天
- 使用私有端點— 確保安全的網路存取
- 調整伺服器參數— 依據工作負載特性
- 使用 Azure Monitor 進行監控— 啟用指標與日誌
- 停止開發/測試伺服器— 閒置時節省成本
錯誤處理
using Azure;
try
{
ArmOperation operation = await servers
.CreateOrUpdateAsync(WaitUntil.Completed, "my-mysql", data);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
Console.WriteLine("伺服器已存在");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
Console.WriteLine($"配置無效:{ex.Message}");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"Azure 錯誤:{ex.Status} - {ex.Message}");
}
連線字串
建立伺服器後,請使用以下方式進行連線:
// ADO.NET 連線字串
string connectionString = $"Server={server.Data.FullyQualifiedDomainName};" +
"Database=myappdb;" +
"User Id=mysqladmin;" +
"密碼=YourSecurePassword123!;" +
"SslMode=Required;";
// 使用 Entra ID 憑證 (建議)
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;";
相關 SDK
| SDK | 用途 | 安裝 |
|---|---|---|
Azure.ResourceManager.MySql |
MySQL 管理(此 SDK) | dotnet add package Azure.ResourceManager.MySql |
Azure.ResourceManager.PostgreSQL |
PostgreSQL 管理 | dotnet add package Azure.ResourceManager.PostgreSql |
MySqlConnector |
MySQL 資料存取 | dotnet add package MySqlConnector |
參考連結
| 資源 | 網址 |
|---|---|
| NuGet 套件 | https://www.nuget.org/packages/Azure.ResourceManager.MySql |
| API 參考指南 | https://learn.microsoft.com/dotnet/api/azure.resourcemanager.mysql |
| 產品文件 | https://learn.microsoft.com/azure/mysql/flexible-server/ |
| GitHub 原始碼 | https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/mysql/Azure.ResourceManager.MySql |
---
name: azure-resource-manager-mysql-dotnet
description: Manage Azure MySQL Flexible Server deployments using the .NET SDK. Create servers, databases, firewall rules, configurations, backups, and configure high availability.
license: MIT
---
# Azure.ResourceManager.MySql (.NET)
Azure Resource Manager SDK for managing MySQL Flexible Server deployments.
## Installation
```bash
dotnet add package Azure.ResourceManager.MySql
dotnet 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 ID
AZURE_RESOURCE_GROUP=<your-resource-group> # Required: resource group name
AZURE_MYSQL_SERVER_NAME=<your-mysql-server> # Required: MySQL Flexible Server name
AZURE_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 range
MySqlFlexibleServerFirewallRuleData 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 services
MySqlFlexibleServerFirewallRuleData 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 configuration
MySqlFlexibleServerConfigurationResource config = await configurations
.GetAsync("max_connections");
// Update configuration
MySqlFlexibleServerConfigurationData configData = new MySqlFlexibleServerConfigurationData
{
Value = "500",
Source = MySqlFlexibleServerConfigurationSource.UserOverride
};
ArmOperation<MySqlFlexibleServerConfigurationResource> operation = await configurations
.CreateOrUpdateAsync(WaitUntil.Completed, "max_connections", configData);
// Common configurations to tune
string[] 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 group
await 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 server
await foreach (MySqlFlexibleServerDatabaseResource db in server.GetMySqlFlexibleServerDatabases())
{
Console.WriteLine($"Database: {db.Data.Name}");
}
```
### 7. Backup and Restore
```csharp
// List available backups
await 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 restore
MySqlFlexibleServerData 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 server
await server.StartAsync(WaitUntil.Completed);
// Restart server
await 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
| Type | Purpose |
|------|---------|
| `MySqlFlexibleServerResource` | Flexible Server instance |
| `MySqlFlexibleServerData` | Server configuration data |
| `MySqlFlexibleServerCollection` | Collection of servers |
| `MySqlFlexibleServerDatabaseResource` | Database within server |
| `MySqlFlexibleServerFirewallRuleResource` | IP firewall rule |
| `MySqlFlexibleServerConfigurationResource` | Server parameter |
| `MySqlFlexibleServerBackupResource` | Backup metadata |
| `MySqlFlexibleServerAadAdministratorResource` | Entra ID admin |
| `MySqlFlexibleServerSku` | SKU (compute tier + size) |
| `MySqlFlexibleServerStorage` | Storage configuration |
| `MySqlFlexibleServerHighAvailability` | HA configuration |
| `MySqlFlexibleServerBackupProperties` | Backup settings |
## SKU Tiers
| Tier | Use Case | SKU Examples |
|------|----------|--------------|
| `Burstable` | Dev/test, light workloads | Standard_B1ms, Standard_B2s |
| `GeneralPurpose` | Production workloads | Standard_D2ds_v4, Standard_D4ds_v4 |
| `MemoryOptimized` | High memory requirements | Standard_E2ds_v4, Standard_E4ds_v4 |
## High Availability Modes
| Mode | Description |
|------|-------------|
| `Disabled` | No HA (single server) |
| `SameZone` | HA within same availability zone |
| `ZoneRedundant` | HA 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 string
string 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
| SDK | Purpose | Install |
|-----|---------|---------|
| `Azure.ResourceManager.MySql` | MySQL management (this SDK) | `dotnet add package Azure.ResourceManager.MySql` |
| `Azure.ResourceManager.PostgreSql` | PostgreSQL management | `dotnet add package Azure.ResourceManager.PostgreSql` |
| `MySqlConnector` | MySQL data access | `dotnet add package MySqlConnector` |
## Reference Links
| Resource | URL |
|----------|-----|
| NuGet Package | https://www.nuget.org/packages/Azure.ResourceManager.MySql |
| API Reference | https://learn.microsoft.com/dotnet/api/azure.resourcemanager.mysql |
| Product Documentation | https://learn.microsoft.com/azure/mysql/flexible-server/ |
| GitHub Source | https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/mysql/Azure.ResourceManager.MySql |
所有檔案
0 個檔案安裝 azure-resource-manager-mysql-dotnet
請下載並將技能檔案解壓縮至您的 .claude/skills/ 目錄中。
下載 ZIP複製儲存庫並將技能檔案複製到您的專案中。
git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-mysql-dotnet # Copy SKILL.md to your .claude/skills/ directory
複製





首頁
