如何在 Windows 上自动重启 MySQL






4.43/5 (8投票s)
2005年5月3日
2分钟阅读

71224

1649
本文提供了一个小型可执行文件 (36K),用于配置 MySQL(或其他 Windows 服务)以便在失败/崩溃时自动重启。
引言
本文介绍了一个鲜为人知的 Windows 2000 及更高版本的功能:在 Windows 服务崩溃时自动重启的能力。 我们使用此功能来提高许多服务的可靠性,包括 MySQL,它(唉)有时会意外崩溃。
背景
Windows 服务是一种特殊设计的应用程序,可以在系统启动时自动启动。 即使没有用户登录到系统,Windows 服务也可以执行。 Windows 服务通常用 C++ 实现,但也可以用任何 .NET 语言(C#、VB.NET)编写。
自 Windows 2000 以来,Windows 服务支持纠正措施 - 在发生故障时要采取的措施(当服务终止而没有向服务控制管理器报告 SERVICE_STOPPED
状态时,该服务被认为是失败的)。
每当服务失败时,服务控制管理器会检测到它并在系统事件日志中记录错误。
The XXX service terminated unexpectedly. It has done this YYY time(s).
如果该服务有关联的纠正措施,它会记录以下消息并执行纠正措施。
The following corrective action will be taken in ZZZ milliseconds: ACTION
纠正措施可以是
- 无操作。(
SC_ACTION_NONE
; 默认值) - 重启服务。(
SC_ACTION_RESTART
) - 重启系统。(
SC_ACTION_REBOOT
) - 运行任何命令。(
SC_ACTION_RUN_COMMAND
)
此示例应用程序是用 Visual C++ .NET 编写的,它使用 Win32 函数 ChangeServiceConfig2
来配置 MySQL 服务,以便在发生故障时自动重启。 它可以作为 MySQL 在 Windows 上的安装/设置程序的一部分被调用(或集成)。
使用应用程序
您可以从命令行提示符 (CMD.EXE) 运行该应用程序
C:\> MySQLServiceSetCorrectiveActions.exe
SUCCESS: Configuration for Service "MySQL" changed!
您可以使用该应用程序配置另一个服务,例如 W3SVC (IIS)
C:\> MySQLServiceSetCorrectiveActions.exe W3SVC
SUCCESS: Configuration for Service "W3SVC" changed!
您可以使用该应用程序在发生故障时调用您自己的恢复程序(甚至是批处理程序)
C:\> MySQLServiceSetCorrectiveActions.exe MySQL "CMD.EXE /C C:\mybatch.bat"
SUCCESS: Configuration for Service "MySQL" changed!
您还可以通过将空字符串作为第二个参数传递来清除纠正措施
C:\> MySQLServiceSetCorrectiveActions.exe MySQL ""
SUCCESS: Configuration for Service "MySQL" changed!
关注点
没有不存在 bug 的代码 - Windows 服务也不例外。 由于大多数服务都为应用程序提供重要的功能,因此它们必须 24/7 全天候运行。 服务中缺少自动重启功能是 Windows 的一个严重缺陷(与 UNIX 相比,inetd 等已存在多年来自动启动/重启守护程序进程)。 现在结束了 - 但不是很流行或广为人知。 让我们让工具将正确的系统调用集成到所有服务中 - 为什么不直接集成到所有服务的安装程序中?
历史
- V1.0:2005 年 5 月 3 日。