Click here to Skip to main content
15,881,882 members
Articles / Database Development / MySQL
Article

How To Automatically restart MySQL on Windows

Rate me:
Please Sign up or sign in to vote.
4.43/5 (8 votes)
2 May 20052 min read 69.8K   1.6K   32   5
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


Written By
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? Pin
Jeremy Falcon17-Apr-08 7:23
professionalJeremy Falcon17-Apr-08 7:23 
GeneralAutomatic database connection when SQL Server restarted in VC Pin
Member 25324548-Mar-07 0:39
Member 25324548-Mar-07 0:39 
QuestionProblems with STARTing a service Pin
Hashamay21-Aug-06 11:14
Hashamay21-Aug-06 11:14 
Hi,

I installed successfuly a service I wrote.
When I get to the SCM I see my new service, but when I try to START it, I get error message #1053.
I know that the SCM did not called my service at all since I log to a file at the first line in my code, and this log never shown.

What can be the reason?
Thanks.
GeneralGreat Pin
GUYFERD_24-Feb-06 22:06
GUYFERD_24-Feb-06 22:06 
GeneralRe: Great Pin
Emmanuel Kartmann4-Feb-06 23:43
Emmanuel Kartmann4-Feb-06 23:43 

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

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