Click here to Skip to main content
Click here to Skip to main content

How To Automatically restart MySQL on Windows

, 2 May 2005
Rate this:
Please Sign up or sign in to vote.
This article provides a small executable (36K) which configures MySQL (or another Windows Service) to automatically restart whenever it fails/crashes.

Introduction

This article presents a not-so-known feature of Windows 2000 and above: the ability to automatically restart a Windows Service when it crashes. We use this feature to improve the reliability of many services, including MySQL which (alas) sometimes crashes unexpectedly.

Background

A Windows Service is a specially designed application that can be started automatically at system boot. Windows Services can execute even when no user is logged on to the system. Windows services are usually implemented in C++, but can also be written in any of the .NET languages (C#, VB.NET).

Since Windows 2000, Windows Services support corrective actions - actions that are to be taken in case of a failure (a Service is considered failed when it terminates without reporting a status of SERVICE_STOPPED to the Service Control Manager).

Whenever a service fails, the Service Control Manager detects it and logs an error in System Event Log:

The XXX service terminated unexpectedly. It has done this YYY time(s).

If the service has an associated corrective action, it logs the following message and executes the corrective action:

The following corrective action will be taken in ZZZ milliseconds: ACTION

Corrective actions can be:

  • No action. (SC_ACTION_NONE; the default)
  • Restart the service. (SC_ACTION_RESTART)
  • Reboot the system. (SC_ACTION_REBOOT)
  • Run any command.(SC_ACTION_RUN_COMMAND)

This sample application, written in Visual C++ .NET, uses the Win32 function ChangeServiceConfig2 to configure the MySQL Service to automatically restart in case of a failure. It can be called (or integrated) as part of a setup/installation procedure of MySQL on Windows.

Using the application

You can run the application from the command line prompt (CMD.EXE):

C:\> MySQLServiceSetCorrectiveActions.exe
SUCCESS: Configuration for Service "MySQL" changed!

You can use the application to configure another service, e.g. W3SVC (IIS):

C:\> MySQLServiceSetCorrectiveActions.exe W3SVC
SUCCESS: Configuration for Service "W3SVC" changed!

You can use the application to call your own recovery program (even a batch) in case of a failure:

C:\> MySQLServiceSetCorrectiveActions.exe MySQL "CMD.EXE /C C:\mybatch.bat"
SUCCESS: Configuration for Service "MySQL" changed!

And you can also clear the corrective action by passing an empty string as the second parameter:

C:\> MySQLServiceSetCorrectiveActions.exe MySQL ""
SUCCESS: Configuration for Service "MySQL" changed!

Points of interest

There is no such thing as bug-free code - Windows Services are no exception. Since most Services provide vital functionality to an application, they must be up and running 24/7. This lack of auto-restart feature in Services was a severe deficiency in Windows (compared to UNIX where inetd - among others - has been there for ages to automatically start/restart daemon processes). Now it's over - but is not so popular or well-known. Let's make tools integrate the right system calls into all services - why not directly into all installation programs for services?

History

  • V1.0: May 3rd, 2005.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

Emmanuel Kartmann
Web Developer
France France
Fell into computer software at the age of 11, founder of 3 startups, and now manager of an independent software vendor (ISV) labelled proSDK (www.prosdk.com)... And still a freeware writer and technical article author!

Comments and Discussions

 
QuestionWhy not just let Windows handle this? PinmemberJeremy Falcon17-Apr-08 8:23 
GeneralAutomatic database connection when SQL Server restarted in VC PinmemberMember #25324548-Mar-07 1:39 
QuestionProblems with STARTing a service PinmemberHashamay21-Aug-06 12:14 
GeneralGreat PinmemberGUYFERD_24-Feb-06 23:06 
GeneralRe: Great PinmemberEmmanuel Kartmann5-Feb-06 0:43 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.1411023.1 | Last Updated 3 May 2005
Article Copyright 2005 by Emmanuel Kartmann
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid