# Hangfire.MySqlStorage **Repository Path**: fqc/Hangfire.MySqlStorage ## Basic Information - **Project Name**: Hangfire.MySqlStorage - **Description**: No description available - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-27 - **Last Updated**: 2026-05-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Hangfire MySql Storage Implementation [![NuGet version](https://badge.fury.io/nu/Hangfire.MySqlStorage.svg)](https://www.nuget.org/packages/Hangfire.MySqlStorage) MySql storage implementation of [Hangfire](http://hangfire.io/) - fire-and-forget, delayed and recurring tasks runner for .NET. Scalable and reliable background job runner. Supports multiple servers, CPU and I/O intensive, long-running and short-running jobs. **Some features of MySql storage implementation is under development!** ## Installation Install MySQL Run the following command in the NuGet Package Manager console to install Hangfire.MySqlStorage: ``` Install-Package Hangfire.MySqlStorage ``` ## Usage Use one the following ways to initialize `MySqlStorage`: - Create new instance of `MySqlStorage` with connection string constructor parameter and pass it to `Configuration` with `UseStorage` method: ``` GlobalConfiguration.Configuration.UseStorage( new MySqlStorage(connectionString)); ``` - There must be `Allow User Variables` set to `true` in the connection string. For example: `server=127.0.0.1;uid=root;pwd=root;database={0};Allow User Variables=True` - Alternatively one or more options can be passed as a parameter to `MySqlStorage`: ``` GlobalConfiguration.Configuration.UseStorage( new MySqlStorage( connectionString, new MySqlStorageOptions { TransactionIsolationLevel = IsolationLevel.ReadCommitted, QueuePollInterval = TimeSpan.FromSeconds(15), JobExpirationCheckInterval = TimeSpan.FromHours(1), CountersAggregateInterval = TimeSpan.FromMinutes(5), PrepareSchemaIfNecessary = true, DashboardJobListLimit = 50000, TransactionTimeout = TimeSpan.FromMinutes(1), TablesPrefix = "Hangfire" })); ``` Description of optional parameters: - `TransactionIsolationLevel` - transaction isolation level. Default is read committed. - `QueuePollInterval` - job queue polling interval. Default is 15 seconds. - `JobExpirationCheckInterval` - job expiration check interval (manages expired records). Default is 1 hour. - `CountersAggregateInterval` - interval to aggregate counter. Default is 5 minutes. - `PrepareSchemaIfNecessary` - if set to `true`, it creates database tables. Default is `true`. - `DashboardJobListLimit` - dashboard job list limit. Default is 50000. - `TransactionTimeout` - transaction timeout. Default is 1 minute. - `TablesPrefix` - prefix for the tables in database. Default is none ### How to limit number of open connections Number of opened connections depends on Hangfire worker count. You can limit worker count by setting `WorkerCount` property value in `BackgroundJobServerOptions`: ``` app.UseHangfireServer( new BackgroundJobServerOptions { WorkerCount = 1 }); ``` More info: http://hangfire.io/features.html#concurrency-level-control ## Dashboard Hangfire provides a dashboard ![Dashboard](https://camo.githubusercontent.com/f263ab4060a09e4375cc4197fb5bfe2afcacfc20/687474703a2f2f68616e67666972652e696f2f696d672f75692f64617368626f6172642d736d2e706e67) More info: [Hangfire Overview](http://hangfire.io/overview.html#integrated-monitoring-ui) ## Build Please use Visual Studio or any other tool of your choice to build the solution ## Test In order to run unit tests and integrational tests set the following variables in you system environment variables (restart of Visual Studio is required): `Hangfire_SqlServer_ConnectionStringTemplate` (default: `server=127.0.0.1;uid=root;pwd=root;database={0};Allow User Variables=True`) `Hangfire_SqlServer_DatabaseName` (default: `Hangfire.MySql.Tests`)