C# – How to Start and Stop MySQL Server Programmatically

Jul 10, 2025
Updated Jun 26, 2026
adriancs

How to Start and Stop MySQL Server Programmatically in C

Sometimes you need to control a MySQL server instance directly from your C# application. This guide shows you how to programmatically start and stop MySQL server using the mysqld.exe and mysqladmin.exe executables.

Core Implementation

1. Check MySQL Server Status

First, let's create a method to check if MySQL server is running:

using System;
using System.Data;
using MySql.Data.MySqlClient;

public static bool IsMySqlServerRunning()
{
    try
    {
        string connectionString = "Server=localhost;Port=3306;Uid=root;Pwd=your_password;";

        using (var connection = new MySqlConnection(connectionString))
        {
            connection.Open();
            return true;
        }
    }
    catch
    {
        return false;
    }
}

2. Start MySQL Server

Here's how to start the MySQL server:

using System;
using System.Diagnostics;
using System.IO;

public static void StartMySqlServer()
{
    string mysqldPath = @"C:\mysql\bin\mysqld.exe";

    if (!File.Exists(mysqldPath))
    {
        throw new Exception("mysqld.exe not found at specified path");
    }

    // Check if server is already running
    if (IsMySqlServerRunning())
    {
        Console.WriteLine("MySQL server is already running");
        return;
    }

    try
    {
        ProcessStartInfo processInfo = new ProcessStartInfo
        {
            FileName = mysqldPath,
            UseShellExecute = false,
            CreateNoWindow = true,
            RedirectStandardOutput = true,
            RedirectStandardError = true
        };

        using (Process process = Process.Start(processInfo))
        {
            Console.WriteLine("MySQL server started successfully");
            // Note: Don't wait for exit as mysqld runs continuously
        }
    }
    catch (Exception ex)
    {
        throw new Exception($"Failed to start MySQL server: {ex.Message}");
    }
}

3. Stop MySQL Server

Here's how to gracefully stop the MySQL server:

public static bool StopMySqlServer()
{
    string mysqladminPath = @"C:\mysql\bin\mysqladmin.exe";

    if (!File.Exists(mysqladminPath))
    {
        throw new Exception("mysqladmin.exe not found at specified path");
    }

    // Check if server is running
    if (!IsMySqlServerRunning())
    {
        Console.WriteLine("MySQL server is not running");
        return true;
    }

    try
    {
        string configFilePath = CreateTempConfigFile();

        ProcessStartInfo processInfo = new ProcessStartInfo
        {
            FileName = mysqladminPath,
            Arguments = $"--defaults-extra-file=\"{configFilePath}\" shutdown",
            UseShellExecute = false,
            CreateNoWindow = true,
            RedirectStandardOutput = true,
            RedirectStandardError = true
        };

        using (Process process = Process.Start(processInfo))
        {
            process.WaitForExit();
        }

        // Clean up temp config file
        File.Delete(configFilePath);

        // Verify shutdown (wait up to 3 seconds)
        for (int i = 0; i < 6; i++)
        {
            System.Threading.Thread.Sleep(500);
            if (!IsMySqlServerRunning())
            {
                Console.WriteLine("MySQL server stopped successfully");
                return true;
            }
        }

        Console.WriteLine("MySQL server may still be running");
        return false;
    }
    catch (Exception ex)
    {
        throw new Exception($"Failed to stop MySQL server: {ex.Message}");
    }
}

4. Create Temporary Configuration File

The mysqladmin command needs credentials to shut down the server. Here's how to create a temporary config file:

using System.IO;

public static string CreateTempConfigFile()
{
    string tempPath = Path.GetTempPath();
    string configFile = Path.Combine(tempPath, $"mysql_temp_{DateTime.Now.Ticks}.cnf");

    string configContent = @"[client]
user=root
password=your_password
host=localhost
port=3306";

    File.WriteAllText(configFile, configContent);
    return configFile;
}

Complete Example Usage

Here's how to use these methods in your application:

// Check current status
if (IsMySqlServerRunning())
{
    Console.WriteLine("MySQL server is currently running");
}
else
{
    Console.WriteLine("MySQL server is not running");

    // Start the server
    StartMySqlServer();

    // Wait a moment for startup
    System.Threading.Thread.Sleep(2000);

    // Verify it's running
    if (IsMySqlServerRunning())
    {
        Console.WriteLine("Server started successfully!");
    }
}

// Do your database work here...

// Stop the server when done
if (StopMySqlServer())
{
    Console.WriteLine("Server stopped successfully!");
}