Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Включает: интеграция хостинга — и —
Client Интеграция
MySQL — это система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL) для управления данными и управления ими. Он используется в различных средах, от небольших проектов до крупномасштабных корпоративных систем, и это популярный выбор для размещения данных, которые лежат в основе микрослужб в облачном приложении. Интеграция базы данных .NET AspireMySQL дает возможность подключаться к существующим базам данных MySQL или создавать новые экземпляры из .NET с образом контейнера mysql
.
Хостинг-интеграция
Интеграция хостинга моделирует сервер как тип MySQL и базу данных как тип MySqlServerResource. Чтобы получить доступ к этим типам и API, добавьте NuGet-пакет 📦Aspire.Hosting.MySql в проект инициализации приложения .
dotnet add package Aspire.Hosting.MySql
Дополнительные сведения см. в статье dotnet add package или Управление зависимостями пакетов в приложениях .NET.
Добавить ресурс сервера MySQL и ресурс базы данных
В проекте хоста приложения вызовите AddMySql, чтобы добавить и вернуть построитель ресурсов MySQL. Свяжите вызов конструктора возвращаемого ресурса с AddDatabase, чтобы добавить ресурс базы данных MySQL.
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...
Замечание
Контейнер SQL Server медленно запускается, поэтому рекомендуется использовать постоянное время существования, чтобы избежать ненужных перезапусков. Дополнительные сведения см. в разделе "Время существования ресурса контейнера".
Когда .NET.NET Aspire добавляет контейнерный образ в хост приложения, как показано в предыдущем примере с образом mysql
, он создает новый экземпляр MySQL на локальном компьютере. Ссылку на конструктор ресурсов MySQL (переменная mysql
) используют для добавления базы данных. База данных называется mysqldb
, а затем добавляется в ExampleProject
. Ресурс MySQL включает учетные данные по умолчанию с параметром username
, равным root
, и случайным значением password
, сгенерированным с использованием метода CreateDefaultPasswordParameter.
При запуске хоста приложения пароль сохраняется в хранилище секретов этого хоста. Он добавлен в раздел Parameters
, например:
{
"Parameters:mysql-password": "<THE_GENERATED_PASSWORD>"
}
Имя параметра — mysql-password
, но на самом деле это просто форматирование имени ресурса с -password
суффиксом. Дополнительные сведения см. в разделе Безопасное хранение секретов приложений в разработке в ASP.NET Core и Добавление ресурса MySQL с параметрами.
Метод WithReference настраивает подключение в ExampleProject
с именем mysqldb
.
Подсказка
Если вы хотите подключиться к существующему серверу MySQL, вызовите AddConnectionString вместо этого. Дополнительные сведения см. в разделе Справочник по существующим ресурсам.
Добавьте ресурс MySQL с томом данных
Чтобы добавить том данных в ресурс SQL Server, вызовите метод WithDataVolume в ресурсе SQL Server:
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...
Том данных используется для сохранения данных сервера MySQL за пределами жизненного цикла контейнера. Объем данных монтируется по пути /var/lib/mysql
в контейнере SQL Server, и если параметр name
не указан, имя генерируется случайным образом. Дополнительную информацию о томах данных и почему их предпочитают вместо bind mounts можно найти в Docker документации: "Томы".
Предупреждение
Пароль хранится в томе данных. При использовании тома данных и при изменении пароля он не будет работать, пока не удалите том.
Это важно
Некоторые интеграции базы данных, включая интеграцию .NET AspireMySQL, не могут успешно использовать тома данных после развертывания в ACA. Это связано с тем, что ACA использует Server блок сообщений (SMB) для подключения контейнеров к томам данных, а некоторые системы не могут использовать это подключение. Aspire На панели мониторинга база данных, затронутая этой проблемой, имеет состояние "Активация" или "Сбой активации", но никогда не отображается как "Запущен".
Проблему можно устранить, развернув в Kubernetes кластере, например AzureKubernetes службы (AKS). Для получения дополнительной информации см. развертывания .NET.NET Aspire.
Добавление ресурса MySQL с подключением привязки данных
Чтобы добавить привязку данных к ресурсу MySQL, вызовите метод 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...
Это важно
Привязки данных имеют ограниченные функциональные возможности по сравнению с томами , которые обеспечивают более высокую производительность, переносимость и безопасность, что делает их более подходящими для производственных сред. Однако бинд-маунты позволяют напрямую получать доступ и изменять файлы на хост-системе, что идеально подходит для разработки и тестирования, когда требуются изменения в режиме реального времени.
Механизмы привязки данных опираются на файловую систему хост-компьютера, чтобы сохранять MySQL данные при перезапусках контейнера. Монтирование привязки данных осуществляется по пути C:\MySql\Data
на Windows (или /MySql/Data
на Unix) на хост-компьютере в контейнере MySQL. Дополнительные сведения о монтировании привязок данных см. в документации Docker: Монтирование привязок.
Добавить ресурс MySQL с параметрами
Если вы хотите явно указать корневой MySQL пароль, его можно передать в качестве параметра. Рассмотрим следующий альтернативный пример:
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);
Дополнительные сведения см. в разделе Внешние параметры.
Добавление ресурса PhpMyAdmin
phpMyAdmin — это популярное средство администрирования с веб-интерфейсом для MySQL. Его можно использовать для просмотра и изменения объектов MySQL, таких как базы данных, таблицы, представления и индексы. Чтобы использовать phpMyAdmin в решении .NET.NET Aspire, вызовите метод WithPhpMyAdmin. Этот метод добавляет новый ресурс контейнера в решение, на котором размещен phpMyAdmin, и подключает его к контейнеру 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...
При запуске решения панель мониторинга .NET.NET Aspire отображает ресурсы phpMyAdmin с конечной точкой. Выберите ссылку на конечную точку, чтобы просмотреть phpMyAdmin на новой вкладке браузера.
Проверка работоспособности хостинговой интеграции
Интеграция хостинга MySQL автоматически добавляет проверку работоспособности ресурса MySQL. Проверка работоспособности проверяет, запущен ли сервер MySQL и что к нему можно установить подключение.
Интеграция хостинга зависит от пакета NuGet 📦 AspNetCore.HealthChecks.MySql.
интеграция Client
Чтобы начать интеграцию базы данных с .NET AspireMySQL, установите пакет NuGet 📦 в проекте, использующем клиент, то есть в проекте приложения, которое использует Aspire клиент. Интеграция клиента MySQL регистрирует экземпляр MySqlConnector.MySqlDataSource
, который можно использовать для взаимодействия с сервером MySQL.
dotnet add package Aspire.MySqlConnector
Дополнительные сведения см. в статье dotnet add package или Управление зависимостями пакетов в приложениях .NET.
Добавьте источник данных MySQL
В файле Program.cs проекта, используемого клиентом, вызовите метод расширения AddMySqlDataSource, чтобы зарегистрировать MySqlDataSource
для использования с помощью контейнера внедрения зависимостей. Метод принимает параметр connectionName
.
builder.AddMySqlDataSource(connectionName: "mysqldb");
Подсказка
Параметр connectionName
должен соответствовать имени, используемому при добавлении ресурса базы данных MySQL в проект узла приложения. Другими словами, при вызове AddDatabase
и указании имени mysqldb
то же имя следует использовать при вызове AddMySqlDataSource
. Дополнительные сведения см. в статье Добавление MySQL ресурсов сервера и ресурса базы данных.
Затем можно получить объект MySqlConnector.MySqlDataSource
с помощью внедрения зависимостей. Например, чтобы получить источник данных из примера службы:
public class ExampleService(MySqlDataSource dataSource)
{
// Use dataSource...
}
Для получения дополнительных сведений о внедрении зависимостей см. .NET внедрение зависимостей.
Добавьте источник данных с ключом MySQL
Могут возникнуть ситуации, когда вам может понадобиться зарегистрировать несколько экземпляров MySqlDataSource
с различными именами подключений. Чтобы зарегистрировать ключи MySQL источников данных, вызовите метод AddKeyedMySqlDataSource:
builder.AddKeyedMySqlDataSource(name: "mainDb");
builder.AddKeyedMySqlDataSource(name: "loggingDb");
Это важно
При использовании ключевых служб ожидается, что ресурс MySQL настраивает две именованные базы данных, одну для mainDb
и одну для loggingDb
.
Затем можно получить объекты MySqlDatSource
с помощью инъекции зависимостей. Например, чтобы получить подключение к образцовому сервису:
public class ExampleService(
[FromKeyedServices("mainDb")] MySqlDataSource mainDbConnection,
[FromKeyedServices("loggingDb")] MySqlDataSource loggingDbConnection)
{
// Use connections...
}
Для получения дополнительной информации о ключевых службах см. раздел .NET внедрение зависимостей: Ключевые службы.
Конфигурация
Интеграция .NET AspireMySQL базы данных предоставляет несколько вариантов настройки подключения на основе требований и соглашений проекта.
Используйте строку подключения
При использовании строки подключения из раздела конфигурации ConnectionStrings
можно указать имя строки подключения при вызове метода AddMySqlDataSource:
builder.AddMySqlDataSource(connectionName: "mysql");
Затем строка подключения извлекается из раздела конфигурации ConnectionStrings
:
{
"ConnectionStrings": {
"mysql": "Server=mysql;Database=mysqldb"
}
}
Дополнительные сведения о форматировании этой строки подключения см. в MySqlConnector: документация по ConnectionString.
Использование поставщиков конфигураций
Интеграция базы данных .NET AspireMySQL поддерживает Microsoft.Extensions.Configuration. Он загружает MySqlConnectorSettings из конфигурации, используя ключ Aspire:MySqlConnector
. Следующий фрагмент кода является примером файла appsettings.json, который настраивает некоторые параметры:
{
"Aspire": {
"MySqlConnector": {
"ConnectionString": "YOUR_CONNECTIONSTRING",
"DisableHealthChecks": true,
"DisableTracing": true
}
}
}
Полный MySQL пример схемы интеграции JSON см. в разделеAspire . MySqlConnector/ConfigurationSchema.json.
Используйте инлайн-делегаты
Кроме того, можно использовать делегат Action<MySqlConnectorSettings>
, чтобы настроить некоторые или все параметры непосредственно, например, отключить проверки состояния непосредственно в коде.
builder.AddMySqlDataSource(
"mysql",
static settings => settings.DisableHealthChecks = true);
Client диагностика состояния интеграции
По умолчанию .NET.NET Aspire интеграции включают проверки состояния для всех служб. Дополнительные сведения см. в обзоре интеграции .NET.NET Aspire.
Интеграция базы данных .NET AspireMySQL:
- Добавляет проверку работоспособности, когда MySqlConnectorSettings.DisableHealthChecks
false
, которая проверяет, можно ли выполнить подключение и выполнять команды в базе данных MySQL. - Интегрируется с HTTP-эндпоинтом
/health
, который указывает, что все зарегистрированные проверки работоспособности должны быть успешно пройдены, чтобы приложение считалось готовым к приему трафика.
Наблюдаемость и телеметрия
.NET
.NET Aspire интеграции автоматически настраивают конфигурации журналирования, трассировки и метрик, которые иногда называются основами наблюдаемости. Дополнительные сведения об наблюдаемости интеграции и телеметрии см. в .NET.NET Aspire обзоре интеграции. В зависимости от резервной службы некоторые интеграции могут поддерживать только некоторые из этих функций. Например, некоторые интеграции поддерживают ведение журнала и трассировку, но не метрики. Функции телеметрии также можно отключить с помощью методов, представленных в разделе конфигурации
Лесозаготовка
Интеграция .NET AspireMySQL использует следующие категории журналов:
MySqlConnector.ConnectionPool
MySqlConnector.MySqlBulkCopy
MySqlConnector.MySqlCommand
MySqlConnector.MySqlConnection
MySqlConnector.MySqlDataSource
Отслеживание
Интеграция .NET AspireMySQL генерирует следующие действия трассировки, используя OpenTelemetry.
MySqlConnector
Метрики
Интеграция .NET AspireMySQL будет выдавать следующие метрики с помощью 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
См. также
- MySQL база данных
- пример контейнеров базы данных .NET.NET Aspire
- интеграции.NET.NET Aspire
- .NET Aspire GitHub репозиторий
.NET Aspire