65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在 Windows 上自动重启 MySQL

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.43/5 (8投票s)

2005年5月3日

2分钟阅读

viewsIcon

71224

downloadIcon

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 日。
© . All rights reserved.