Dela via


Aspire MySQL integrering

Inkluderar:Värdintegrering ingår Värdintegrering &–& integrering ingår integration

MySQL är ett RDBMS (Relational Database Management System) med öppen källkod som använder SQL (Structured Query Language) för att hantera och manipulera data. Det används i många olika miljöer, från små projekt till storskaliga företagssystem och det är ett populärt val att vara värd för data som ligger till grund för mikrotjänster i ett molnbaserat program. Med AspireMySQL databasintegrering kan du ansluta till befintliga MySQL databaser eller skapa nya instanser från .NET med mysql containeravbildningen.

Integrering av värdtjänster

MySQL:s hosting-integration modellerar servern som MySqlServerResource typen och databasen som MySqlDatabaseResource typen. Om du vill komma åt dessa typer och API:er lägger du till 📦Aspire. Hosting.MySql NuGet-paketet i AppHost-projektet .

dotnet add package Aspire.Hosting.MySql

För mer information, se dotnet add package eller Hantera paketberoenden i .NET applikationer.

Lägg till MySQL serverresurs och databasresurs

I ditt AppHost-projekt använder du AddMySql för att lägga till och returnera en MySQL resurskompilator. Länka ett anrop från den returnerade resursbyggaren till AddDatabaseför att addera en MySQL databasresurs.

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

Anmärkning

Det tar lång tid att starta SQL Server-containern, så det är bäst att använda en varaktig livstid för att undvika onödiga omstarter. Mer information finns i containerresursens livslängd.

När Aspire en containeravbildning läggs till i AppHost, som du ser i föregående exempel med avbildningen mysql , skapas en ny MySQL instans på den lokala datorn. En referens till din MySQL resursbyggare (variabeln mysql) används för att lägga till en databas. Databasen heter mysqldb och läggs sedan till i ExampleProject. Den MySQL resursen innehåller standardautentiseringsuppgifter med en username av root och en slumpmässig password som genereras med hjälp av metoden CreateDefaultPasswordParameter.

När AppHost körs lagras lösenordet i AppHosts hemliga arkiv. Det läggs till i avsnittet Parameters, till exempel:

{
  "Parameters:mysql-password": "<THE_GENERATED_PASSWORD>"
}

Namnet på parametern är mysql-password, men egentligen är det bara att formatera resursnamnet med ett -password suffix. Mer information finns i Säker lagring av apphemligheter under utveckling i ASP.NET Core och Lägg till MySQL resurs med parametrar.

Metoden WithReference konfigurerar en anslutning i ExampleProject med namnet mysqldb.

Tips/Råd

Om du hellre vill ansluta till en befintlig MySQL server anropar du AddConnectionString i stället. Mer information finns i Referera till befintliga resurser.

Lägga till en MySQL resurs med en datavolym

Om du vill lägga till en datavolym i resursen SQL Server anropar du metoden WithDataVolume på den SQL Server resursen:

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

Datavolymen används för att bevara MySQL serverdata utanför containerns livscykel. Datavolymen monteras på /var/lib/mysql-vägen i SQL Server-containern och när en name-parameter inte anges genereras namnet slumpmässigt. Mer information om datavolymer och om varför de föredras framför bind mountsfinns i Docker dokument: Volymer.

Varning

Lösenordet lagras i datavolymen. När du använder en datavolym och om lösenordet ändras fungerar det inte förrän du tar bort volymen.

Viktigt!

Vissa databasintegreringar, inklusive integreringen AspireMySQL, kan inte framgångsrikt använda datavolymer efter utplaceringen till Azure Container Apps (ACA). Det beror på att ACA använder Server Message Block (SMB) för att ansluta containrar till datavolymer, och vissa system kan inte använda den här anslutningen. Aspire På instrumentpanelen har en databas som påverkas av det här problemet statusen Aktivering eller Aktivering misslyckades men visas aldrig som Körs.

Du kan lösa problemet genom att distribuera till ett Kubernetes kluster, till exempel AzureKubernetes Tjänster (AKS). Mer information finns i Aspire distributioner.

Lägg till en MySQL-resurs med en databindning

Om du vill lägga till en databindningspunkt till resursen MySQL anropar du metoden WithDataBindMount.

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

Viktigt!

Data bind mounts har begränsade funktioner jämfört med volumes som erbjuder bättre prestanda, portabilitet och säkerhet, vilket gör dem mer lämpliga för produktionsmiljöer. Bindningsmonteringar tillåter dock direkt åtkomst och ändring av filer i värdsystemet, perfekt för utveckling och testning där realtidsändringar behövs.

Databindningar förlitar sig på värddatorns filsystem för att bevara MySQL-datan mellan omstarter av containrar. Databindningsfästet monteras på C:\MySql\Data-sökvägen i Windows (eller /MySql/Data på Unix) på värddatorn i MySQL-containern. Mer information om bindningspunkter för data finns i Docker dokumentation: Bindningspunkter.

Lägga till MySQL resurs med parametrar

När du uttryckligen vill ange ett rotlösenord MySQL kan du skicka det som en parameter. Tänk dig följande alternativa exempel:

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);

Mer information finns i externa parametrar.

Lägga till en PhpMyAdmin-resurs

phpMyAdmin är ett populärt webbaserat administrationsverktyg för MySQL. Du kan använda den för att bläddra och ändra MySQL objekt som databaser, tabeller, vyer och index. Om du vill använda phpMyAdmin i din Aspire lösning anropar du WithPhpMyAdmin metoden. Den här metoden lägger till en ny containerresurs i lösningen som är värd för phpMyAdmin och ansluter den till containern MySQL:

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

När du kör lösningen Aspire visar instrumentpanelen phpMyAdmin-resurserna med en slutpunkt. Välj länken till slutpunkten för att visa phpMyAdmin på en ny webbläsarflik.

Utför hälsokontroller för integration

MySQL värdintegrering lägger automatiskt till en hälsokontroll för den MySQL resursen. Hälsokontrollen verifierar att MySQL-servern körs och att en anslutning kan upprättas till den.

Värdintegrationen förlitar sig på 📦 AspNetCore.HealthChecks.MySql NuGet-paketet.

Client integration

Kom igång med databasintegrering AspireMySQL genom att 📦Aspireinstallera . NuGet-paketet MySqlConnector i det klientkrävande projektet, dvs. projektet för det program som använder MySQL klienten. Klientintegrering MySQL registrerar en MySqlConnector.MySqlDataSource instans som du kan använda för att interagera med MySQL servern.

dotnet add package Aspire.MySqlConnector

För mer information, se dotnet add package eller Hantera paketberoenden i .NET applikationer.

Lägga till en MySQL datakälla

I Program.cs-filen för ditt klientprojekt anropar du utökningsmetoden AddMySqlDataSource för att registrera en MySqlDataSource för användning via beroendeinjektionsbehållaren. Metoden tar ett parameter av typen connectionName.

builder.AddMySqlDataSource(connectionName: "mysqldb");

Tips/Råd

Parametern connectionName måste matcha namnet som används när du lägger till databasresursen MySQL i AppHost-projektet. Med andra ord, när du anropar AddDatabase och anger ett namn på mysqldb ska samma namn användas när du anropar AddMySqlDataSource. För mer information, se Lägg till MySQL serverresurs och databasresurs.

Du kan sedan hämta instansen MySqlConnector.MySqlDataSource genom beroendeinjektion. Om du till exempel vill hämta datakällan från en exempeltjänst:

public class ExampleService(MySqlDataSource dataSource)
{
    // Use dataSource...
}

Mer information om beroendeinmatning finns i .NET beroendeinmatning.

Lägg till nycklad MySQL-datakälla

Det kan finnas situationer där du vill registrera flera MySqlDataSource instanser med olika anslutningsnamn. Om du vill registrera nyckelade MySQL datakällor anropar du metoden AddKeyedMySqlDataSource:

builder.AddKeyedMySqlDataSource(name: "mainDb");
builder.AddKeyedMySqlDataSource(name: "loggingDb");

Viktigt!

När du använder nyckelade tjänster förväntas din MySQL resurs ha konfigurerat två namngivna databaser, en för mainDb och en för loggingDb.

Sedan kan du hämta MySqlDataSource-instans genom dependency injection. Om du till exempel vill hämta datakällan från en exempeltjänst:

public class ExampleService(
    [FromKeyedServices("mainDb")] MySqlDataSource mainDataSource,
    [FromKeyedServices("loggingDb")] MySqlDataSource loggingDataSource)
{
    // Use data sources...
}

Mer information om nyckeltjänster finns i .NET beroendeinjektion: Nyckeltjänster.

Konfiguration

Aspire MySQL-databasintegrering innehåller flera alternativ för att konfigurera anslutningen baserat på kraven och konventionerna i projektet.

Använda en anslutningssträng

När du använder en anslutningssträng från ConnectionStrings-konfigurationsavsnittet kan du ange namnet på anslutningssträngen när du anropar AddMySqlDataSource-metoden:

builder.AddMySqlDataSource(connectionName: "mysql");

Sedan hämtas anslutningssträngen från ConnectionStrings-konfigurationsavsnittet:

{
  "ConnectionStrings": {
    "mysql": "Server=mysql;Database=mysqldb"
  }
}

Mer information om hur du formaterar den här anslutningssträngen finns i MySqlConnector: ConnectionString-dokumentation.

Använda konfigurationsprovidrar

Aspire MySQL-databasintegrering stöder Microsoft.Extensions.Configuration. Den läser in MySqlConnectorSettings från konfigurationen med hjälp av Aspire:MySqlConnector-nyckeln. Följande kodfragment är ett exempel på en appsettings.json fil som konfigurerar några av alternativen:

{
  "Aspire": {
    "MySqlConnector": {
      "ConnectionString": "YOUR_CONNECTIONSTRING",
      "DisableHealthChecks": true,
      "DisableTracing": true
    }
  }
}

Det fullständiga MySQL integrationsschemat JSON finns i Aspire. MySqlConnector/ConfigurationSchema.json.

Använd inline-delegeringar

Du kan också delegera Action<MySqlConnectorSettings> för att konfigurera vissa eller alla alternativ direkt i koden, till exempel för att inaktivera hälsokontroller.

builder.AddMySqlDataSource(
    "mysql",
    static settings => settings.DisableHealthChecks  = true);

Client hälsokontroller för integrering

Integreringar aktiverar som standard Aspirehälsokontroller för alla tjänster. Mer information finns i Aspire översikten över integreringar.

Aspire MySQL databas­integrering

  • Lägger till hälsokontrollen när MySqlConnectorSettings.DisableHealthChecks är false, vilket verifierar att en anslutning kan göras och att kommandon kan köras mot MySQL-databasen.
  • Integreras med HTTP-slutpunkten /health, som anger att alla registrerade hälsokontroller måste klaras för att appen ska anses vara redo att acceptera trafik.

Observerbarhet och telemetri

Aspire integreringar konfigurerar automatiskt konfigurationer för loggning, spårning och mått, som ibland kallas grundpelarna för observerbarhet. Mer information om integreringsobservabilitet och telemetri finns i Aspire översikten över integreringar. Beroende på säkerhetskopieringstjänsten kanske vissa integreringar bara stöder vissa av dessa funktioner. Vissa integreringar stöder till exempel loggning och spårning, men inte mått. Telemetrifunktioner kan också inaktiveras med hjälp av de tekniker som visas i avsnittet Configuration.

Loggning / Skogsavverkning

Aspire MySQL-integreringen använder följande loggkategorier:

  • MySqlConnector.ConnectionPool
  • MySqlConnector.MySqlBulkCopy
  • MySqlConnector.MySqlCommand
  • MySqlConnector.MySqlConnection
  • MySqlConnector.MySqlDataSource

Spårning

Aspire MySQL-integreringen genererar följande spårningsaktiviteter med hjälp av OpenTelemetry:

  • MySqlConnector

Mätvärden

Integreringen AspireMySQL genererar följande mått med hjälp av OpenTelemetry:

  • MySqlConnector
    • db.client.connections.create_time
    • db.client.connections.use_time
    • db.client.connections.wait_time
    • db.client.connections.idle.max
    • db.client.connections.idle.min
    • db.client.connections.max
    • db.client.connections.pending_requests
    • db.client.connections.timeouts
    • db.client.connections.usage

Se även