Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
              Inclusief: —&— 
Client integratie
              MySQL is een opensource Relational Database Management System (RDBMS) dat gebruikmaakt van Structured Query Language (SQL) voor het beheren en bewerken van gegevens. Het wordt gebruikt in een groot aantal verschillende omgevingen, van kleine projecten tot grootschalige bedrijfssystemen en het is een populaire keuze om gegevens te hosten die microservices in een cloudeigen toepassing ondersteunen. Met de AspireMySQL-database-integratie kunt u verbinding maken met bestaande MySQL-databases of nieuwe exemplaren maken vanuit .NET met de mysql-containerimage.
Hostingintegratie
De MySQL-hostingintegratie modelleert de server als het MySqlServerResource-type en de database als het MySqlDatabaseResource-type. Als u toegang wilt krijgen tot deze typen en API's, voegt u de 📦Aspire. Hosting.MySql NuGet-pakket in het AppHost-project .
dotnet add package Aspire.Hosting.MySql
Zie dotnet pakket toevoegen of Pakketafhankelijkheden beheren in .NET toepassingenvoor meer informatie.
MySQL serverresource en databaseresource toevoegen
Roep in uw AppHost-project AddMySql aan om een MySQL resourcebouwer toe te voegen en te retourneren. Koppel een aanroep aan de teruggegeven resource builder naar AddDatabaseom een MySQL databaseresource toe te voegen.
var builder = DistributedApplication.CreateBuilder(args);
var mysql = builder.AddMySql("mysql")
                   .WithLifetime(ContainerLifetime.Persistent);
var mysqldb = mysql.AddDatabase("mysqldb");
var myService = builder.AddProject<Projects.ExampleProject>()
                       .WithReference(mysqldb)
                       .WaitFor(mysqldb);
// After adding all resources, run the app...
Opmerking
De SQL Server container start traag op, dus het is beter om een permanente levensduur te gebruiken om onnodige herstarts te voorkomen. Zie Levensduur van containerresourcesvoor meer informatie.
Wanneer Aspire u een containerinstallatiekopieën toevoegt aan de AppHost, zoals wordt weergegeven in het vorige voorbeeld met de mysql installatiekopieën, wordt er een nieuw MySQL exemplaar op uw lokale computer gemaakt. Een verwijzing naar de MySQL resource-builder (de mysql variabele) wordt gebruikt om een database toe te voegen. De database heeft de naam mysqldb en wordt vervolgens toegevoegd aan de ExampleProject. De MySQL-resource bevat standaardreferenties met een username van root en een willekeurige password die is gegenereerd met behulp van de CreateDefaultPasswordParameter-methode.
Wanneer de AppHost wordt uitgevoerd, wordt het wachtwoord opgeslagen in het geheime archief van AppHost. Deze wordt toegevoegd aan de sectie Parameters, bijvoorbeeld:
{
  "Parameters:mysql-password": "<THE_GENERATED_PASSWORD>"
}
De naam van de parameter is mysql-password, maar eigenlijk is het alleen het opmaken van de resourcenaam met een -password achtervoegsel. Voor meer informatie, zie Veilige opslag van app-geheimen in ontwikkeling in ASP.NET Core en , en voeg MySQL resource toe met parameters.
De methode WithReference configureert een verbinding in de ExampleProject met de naam mysqldb.
Aanbeveling
Als u liever verbinding wilt maken met een bestaande MySQL-server, roept u in plaats daarvan AddConnectionString aan. Raadpleeg Bestaande bronnenvoor meer informatie.
Een MySQL-resource toevoegen met een gegevensvolume
Als u een gegevensvolume wilt toevoegen aan de SQL Server-resource, roept u de methode WithDataVolume aan voor de SQL Server resource:
var builder = DistributedApplication.CreateBuilder(args);
var mysql = builder.AddMySql("mysql")
                   .WithDataVolume();
var mysqldb = mysql.AddDatabase("mysqldb");
builder.AddProject<Projects.ExampleProject>()
       .WithReference(mysqldb)
       .WaitFor(mysqldb);
// After adding all resources, run the app...
Het gegevensvolume wordt gebruikt om de MySQL servergegevens buiten de levenscyclus van de container te behouden. Het gegevensvolume wordt gekoppeld aan het /var/lib/mysql pad in de SQL Server container en wanneer er geen name parameter wordt opgegeven, wordt de naam willekeurig gegenereerd. Voor meer informatie over gegevensvolumes en waarom ze de voorkeur krijgen boven bind mounts, zie Docker docs: Volumes.
Waarschuwing
Het wachtwoord wordt opgeslagen in het gegevensvolume. Wanneer u een gegevensvolume gebruikt en als het wachtwoord wordt gewijzigd, werkt het pas als u het volume verwijdert.
Belangrijk
Sommige databaseintegraties, inclusief de AspireMySQL integratie, kunnen geen gegevensvolumes gebruiken na de implementatie naar Azure Container Apps (ACA). Dit komt doordat ACA gebruikmaakt van Server Message Block (SMB) om containers te verbinden met gegevensvolumes, en sommige systemen kunnen deze verbinding niet gebruiken. In het Aspire dashboard heeft een database die wordt beïnvloed door dit probleem de status Activeren of Activeren is mislukt , maar wordt nooit vermeld als Actief.
U kunt het probleem oplossen door te implementeren in een Kubernetes cluster, zoals AzureKubernetes Services (AKS). Zie implementaties voor meer informatieAspire.
Een MySQL-resource toevoegen met een gegevensbindmount.
Als u een koppeling voor gegevensbinding wilt toevoegen aan de MySQL-resource, roept u de WithDataBindMount methode aan:
var builder = DistributedApplication.CreateBuilder(args);
var mysql = builder.AddMySql("mysql")
                   .WithDataBindMount(source: @"C:\MySql\Data");
var db = sql.AddDatabase("mysqldb");
builder.AddProject<Projects.ExampleProject>()
       .WithReference(mysqldb)
       .WaitFor(mysqldb);
// After adding all resources, run the app...
Belangrijk
Data bind mounts hebben beperkte functionaliteit vergeleken met volumes, die betere prestaties, draagbaarheid en beveiliging bieden, waardoor ze geschikter zijn voor productieomgevingen. Bind mounts bieden echter directe toegang tot en wijziging van bestanden op het hostsysteem, wat ideaal is voor ontwikkeling en testen waarbij wijzigingen in real-time nodig zijn.
Data bind mounts zijn afhankelijk van het bestandssysteem van de hostmachine om de MySQL-gegevens te behouden bij herstarten van de container. De mount voor databinding wordt gemonteerd op de C:\MySql\Data in Windows (of /MySql/Data op Unix) op het pad van de hostcomputer in de MySQL container. Voor meer informatie over gegevensbindingskoppelingen, zie Docker docs: Bindingskoppelingen.
MySQL resource toevoegen met parameters
Wanneer u een hoofdwachtwoord MySQL expliciet wilt opgeven, kunt u dit doorgeven als parameter. Bekijk het volgende alternatieve voorbeeld:
var password = builder.AddParameter("password", secret: true);
var mysql = builder.AddMySql("mysql", password)
                   .WithLifetime(ContainerLifetime.Persistent);
var mysqldb = mysql.AddDatabase("mysqldb");
var myService = builder.AddProject<Projects.ExampleProject>()
                       .WithReference(mysqldb)
                       .WaitFor(mysqldb);
Zie Externe parametersvoor meer informatie.
Een PhpMyAdmin-resource toevoegen
phpMyAdmin is een populair webbeheerprogramma voor MySQL. U kunt deze gebruiken om door MySQL objecten zoals databases, tabellen, weergaven en indexen te bladeren en te wijzigen. Als u phpMyAdmin in uw Aspire oplossing wilt gebruiken, roept u de WithPhpMyAdmin methode aan. Met deze methode wordt een nieuwe containerresource toegevoegd aan de oplossing die phpMyAdmin host en deze verbindt met de MySQL-container:
var builder = DistributedApplication.CreateBuilder(args);
var mysql = builder.AddMySql("mysql")
                   .WithPhpMyAdmin();
var db = sql.AddDatabase("mysqldb");
builder.AddProject<Projects.ExampleProject>()
       .WithReference(mysqldb)
       .WaitFor(mysqldb);
// After adding all resources, run the app...
Wanneer u de oplossing uitvoert, worden in het Aspire dashboard de phpMyAdmin-resources met een eindpunt weergegeven. Selecteer de koppeling naar het eindpunt om phpMyAdmin weer te geven in een nieuw browsertabblad.
Gezondheidscontroles van hostingintegratie
De MySQL hostingintegratie voegt automatisch een statuscontrole toe voor de MySQL resource. De gezondheidscontrole verifieert dat de MySQL-server draait en dat er verbinding mee kan worden gemaakt.
De hostingintegratie is afhankelijk van het 📦 AspNetCore.HealthChecks.MySql NuGet-pakket.
Client integratie
Als u aan de slag wilt gaan met de AspireMySQL databaseintegratie, installeert u het 📦Aspire. MySqlConnector NuGet-pakket in het clientgebruikte project, dat wil gezegd het project voor de toepassing die gebruikmaakt van de MySQL client. De MySQL clientintegratie registreert een MySqlConnector.MySqlDataSource exemplaar dat u kunt gebruiken om met de MySQL server te communiceren.
dotnet add package Aspire.MySqlConnector
Zie dotnet pakket toevoegen of Pakketafhankelijkheden beheren in .NET toepassingenvoor meer informatie.
Een MySQL-gegevensbron toevoegen
Roep in het Program.cs bestand van het clientgebruikte project de AddMySqlDataSource extensiemethode aan om een MySqlDataSource te registreren voor gebruik via de container voor afhankelijkheidsinjectie. De methode gebruikt een connectionName parameter.
builder.AddMySqlDataSource(connectionName: "mysqldb");
Aanbeveling
De connectionName parameter moet overeenkomen met de naam die wordt gebruikt bij het toevoegen van de MySQL databaseresource in het AppHost-project. Met andere woorden, wanneer u AddDatabase aanroept en een naam opgeeft van mysqldb diezelfde naam moet worden gebruikt bij het aanroepen van AddMySqlDataSource. Voor meer informatie, zie server-resource en database-resource toevoegen MySQL.
Vervolgens kunt u het MySqlConnector.MySqlDataSource exemplaar ophalen met behulp van afhankelijkheidsinjectie. Als u bijvoorbeeld de gegevensbron wilt ophalen uit een voorbeeldservice:
public class ExampleService(MySqlDataSource dataSource)
{
    // Use dataSource...
}
Voor meer informatie over afhankelijkheidsinjectie, zie .NET.
Gesleutelde gegevensbron MySQL toevoegen
Er kunnen situaties zijn waarin u meerdere MySqlDataSource exemplaren met verschillende verbindingsnamen wilt registreren. Roep de methode MySQL aan om keyed AddKeyedMySqlDataSource gegevensbronnen te registreren.
builder.AddKeyedMySqlDataSource(name: "mainDb");
builder.AddKeyedMySqlDataSource(name: "loggingDb");
Belangrijk
Wanneer u sleutelservices gebruikt, wordt verwacht dat uw MySQL resource twee benoemde databases heeft geconfigureerd, één voor de mainDb en één voor de loggingDb.
Vervolgens kunt u de MySqlDataSource instanties ophalen via afhankelijkheidsinjectie. Als u bijvoorbeeld de gegevensbron wilt ophalen uit een voorbeeldservice:
public class ExampleService(
    [FromKeyedServices("mainDb")] MySqlDataSource mainDataSource,
    [FromKeyedServices("loggingDb")] MySqlDataSource loggingDataSource)
{
    // Use data sources...
}
Voor meer informatie over op sleutels gebaseerde services, zie .NET afhankelijkheidsinjectie: Keyed services.
Configuratie
De AspireMySQL-databaseintegratie biedt meerdere opties voor het configureren van de verbinding op basis van de vereisten en conventies van uw project.
Een verbindingsreeks gebruiken
Wanneer u een verbindingsreeks uit de sectie ConnectionStrings configuratie gebruikt, kunt u de naam van de verbindingsreeks opgeven bij het aanroepen van AddMySqlDataSource methode:
builder.AddMySqlDataSource(connectionName: "mysql");
Vervolgens wordt de verbindingsreeks opgehaald uit de ConnectionStrings configuratiesectie:
{
  "ConnectionStrings": {
    "mysql": "Server=mysql;Database=mysqldb"
  }
}
Zie MySqlConnector: ConnectionString-documentatievoor meer informatie over het opmaken van deze verbindingsreeks.
Configuratieproviders gebruiken
De integratie van de AspireMySQL-database ondersteunt Microsoft.Extensions.Configuration. Het laadt MySqlConnectorSettings vanuit de configuratie met behulp van de Aspire:MySqlConnector sleutel. Het volgende codefragment is een voorbeeld van een appsettings.json-bestand waarmee een aantal van de opties wordt geconfigureerd:
{
  "Aspire": {
    "MySqlConnector": {
      "ConnectionString": "YOUR_CONNECTIONSTRING",
      "DisableHealthChecks": true,
      "DisableTracing": true
    }
  }
}
Zie voor het volledige MySQL integratieschema JSONAspire. MySqlConnector/ConfigurationSchema.json.
Gebruik inline-delegaten
U kunt ook de Action<MySqlConnectorSettings> delegate doorgeven om enkele of alle opties inline in te stellen, bijvoorbeeld om gezondheidscontroles vanuit de code uit te schakelen.
builder.AddMySqlDataSource(
    "mysql",
    static settings => settings.DisableHealthChecks  = true);
Gezondheidscontroles voor Client-integratie
Aspire Standaard schakelen integraties statuscontroles in voor alle services. Zie Aspire het overzicht van integraties voor meer informatie.
De AspireMySQL-database-integratie:
- Voegt de statuscontrole toe wanneer MySqlConnectorSettings.DisableHealthChecks is 
false, waarmee wordt gecontroleerd of er een verbinding kan worden gemaakt en opdrachten kunnen worden uitgevoerd op de MySQL-database. - Integreert met het 
/healthHTTP-eindpunt, dat aangeeft dat alle geregistreerde gezondheidscontroles moeten slagen voordat de app verkeer kan accepteren. 
Waarneembaarheid en telemetrie
Aspire Integraties stellen automatisch configuraties voor logboekregistratie, tracering en metrische gegevens in, die ook wel de pijlers van waarneembaarheid worden genoemd. Zie het overzicht van integratieobserveerbaarheid en telemetrie voor meer informatie over integratieobserveerbaarheid en telemetrieAspire. Afhankelijk van de back-upservice ondersteunen sommige integraties mogelijk slechts enkele van deze functies. Sommige integraties ondersteunen bijvoorbeeld logboekregistratie en tracering, maar geen metrische gegevens. Telemetriefuncties kunnen ook worden uitgeschakeld met behulp van de technieken die worden weergegeven in de sectie Configuratie.
Loggen
De AspireMySQL-integratie maakt gebruik van de volgende logboekcategorieën:
MySqlConnector.ConnectionPoolMySqlConnector.MySqlBulkCopyMySqlConnector.MySqlCommandMySqlConnector.MySqlConnectionMySqlConnector.MySqlDataSource
Opsporing
De AspireMySQL-integratie verzendt de volgende traceringsactiviteiten met behulp van OpenTelemetry:
MySqlConnector
Statistieken
De integratie van AspireMySQL verzendt de volgende metrische gegevens met behulp van OpenTelemetry:
- MySqlConnector 
db.client.connections.create_timedb.client.connections.use_timedb.client.connections.wait_timedb.client.connections.idle.maxdb.client.connections.idle.mindb.client.connections.maxdb.client.connections.pending_requestsdb.client.connections.timeoutsdb.client.connections.usage