Documentation Home

2.3.4.8 将 MySQL 作为 Windows 服务启动

在 Windows 上,推荐的运行 MySQL 的方式是将其安装为 Windows 服务,这样 MySQL 就会随着 Windows 的启动和停止而自动启动和停止。作为服务安装的 MySQL 服务器也可以使用NET命令或图形 服务实用程序从命令行进行控制 。通常,要将 MySQL 安装为 Windows 服务,您应该使用具有管理员权限的帐户登录。

服务实用程序 (Windows 服务控制管理器)可以在 Windows 控制面板中找到。为避免冲突,建议在从命令行执行服务器安装或删除操作时 关闭服务实用程序。

安装服务

在将 MySQL 作为 Windows 服务安装之前,如果当前服务器正在运行,您应该先停止它,方法是使用以下命令:

C:\> "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqladmin"
          -u root shutdown
笔记

如果 MySQLroot用户帐户有密码,则需要 使用该选项 调用mysqladmin并在出现提示时提供密码。-p

此命令调用 MySQL 管理实用程序 mysqladmin连接到服务器并告诉它关闭。该命令以 MySQL root用户身份连接,这是 MySQL 授权系统中的默认管理帐户。

笔记

MySQL 授权系统中的用户完全独立于 Windows 下的任何操作系统用户。

使用以下命令将服务器安装为服务:

C:\> "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld" --install

服务安装命令不会启动服务器。相关说明将在本节后面给出。

为了更方便调用MySQL程序,可以将MySQLbin目录的路径名添加到你的Windows系统PATH环境变量中:

  • 在 Windows 桌面上,右键单击“我的电脑”图标,然后选择 “属性” 。

  • 接下来从出现的“系统属性”菜单中选择“高级”选项卡,然后单击“环境变量” 按钮。

  • System Variables下,选择 Path,然后单击 Edit按钮。应出现“编辑系统变量”对话框。

  • 将光标放在出现在标记为Variable Value的空间中的文本末尾。(使用 End键确保您的光标位于此空格中文本的最末尾。)然后输入您的 MySQL bin目录的完整路径名(例如, C:\Program Files\MySQL\MySQL Server 5.7\bin),并且应该有一个分号将此路径与该字段中存在的任何值。通过单击“确定”关闭此对话,然后依次关闭每个对话直到所有打开的对话都被取消。您现在应该能够通过在 DOS 提示符下从系统上的任何目录中键入其名称来调用任何 MySQL 可执行程序,而无需提供路径。这包括服务器、mysql客户端和所有 MySQL 命令行实用程序,例如mysqladminmysqldump

    如果您在同一台机器上运行多个 MySQL 服务器, 则不应将 MySQLbin 目录添加到 Windows 。PATH

警告

手动编辑系统时必须格外小心 PATH;意外删除或修改现有值的任何部分都 PATH可能导致系统出现故障甚至无法使用。

安装服务时可以使用以下附加参数:

  • --install您可以在选项 后立即指定服务名称 。默认服务名称是MySQL.

  • 如果给出了服务名称,它后面可以跟一个选项。按照惯例,这应该是 指定一个选项文件的名称,服务器在启动时应该从该文件中读取选项。 --defaults-file=file_name

    可以使用除 之外的单个选项, --defaults-file但不鼓励使用。 --defaults-file更灵活,因为它使您能够通过将它们放在命名的选项文件中来为服务器指定多个启动选项。

  • 您还可以--local-service 在服务名称后面指定一个选项。这会导致服务器使用LocalService具有有限系统权限的 Windows 帐户运行。如果 --defaults-file--local-service都在服务名称之后给出,则它们的顺序可以是任意的。

对于作为 Windows 服务安装的 MySQL 服务器,以下规则确定服务器使用的服务名称和选项文件:

  • 如果服务安装命令没有指定服务名称或在选项MySQL后面指定默认服务名称()--install,则服务器使用服务名称并从标准选项文件中 MySQL的组中读取选项。[mysqld]

  • 如果 service-installation 命令指定的服务名称不是MySQL跟在 --install选项后面,则服务器使用该服务名称。[mysqld]它从组和与标准选项文件中的服务同名的组中读取选项 。这使您能够将[mysqld]组用于应由所有 MySQL 服务使用的选项,以及一个具有服务名称的选项组,供安装有该服务名称的服务器使用。

  • 如果 service-installation 命令 --defaults-file在服务名称后指定一个选项,则服务器读取选项的方式与上一项中描述的相同,只是它只从命名文件中读取选项并忽略标准选项文件。

作为一个更复杂的示例,请考虑以下命令:

C:\> "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld"
          --install MySQL --defaults-file=C:\my-opts.cnf

此处,默认服务名称 ( MySQL) 在--install选项后给出。如果没有 --defaults-file给出选项,这个命令会导致服务器[mysqld]从标准选项文件中读取组。但是,因为 --defaults-file选项存在,服务器从 [mysqld]选项组中读取选项,并且只从命名文件中读取。

笔记

在 Windows 上,如果服务器是用 --defaults-file--install选项启动的, 则--install必须是第一个。否则,mysqld.exe尝试启动 MySQL 服务器。

在启动 MySQL 服务之前,您 还可以在 Windows服务实用程序 中将选项指定为启动参数 。

最后,在尝试启动 MySQL 服务之前,确保要运行该服务的操作系统用户的用户变量%TEMP%%TMP%(以及%TMPDIR%,如果曾经设置过)指向用户具有写入权限的文件夹. 运行 MySQL 服务的默认用户是 , 其和LocalSystem的默认值为 ,目录 默认具有写权限。但是,如果该默认设置有任何更改(例如,更改运行服务的用户或提到的用户变量,或 %TEMP%%TMP%C:\Windows\TempLocalSystem--tmpdiroption has been used to put the temporary directory somewhere), MySQL 服务可能无法运行,因为对临时目录的写访问权限尚未授予适当的用户。

启动服务

将 MySQL 服务器实例安装为服务后,Windows 会在每次启动时自动启动该服务。该服务也可以立即从 服务实用程序启动,或者使用sc startmysqld_service_nameNET START mysqld_service_name 命令启动。SCNET 命令不区分大小写。

当作为服务运行时,mysqld无法访问控制台窗口,因此在那里看不到任何消息。如果 mysqld没有启动,请检查错误日志以查看服务器是否在其中写入任何消息以指示问题的原因。错误日志位于 MySQL 数据目录(例如,C:\Program Files\MySQL\MySQL Server 5.7\data)。它是后缀为.err.

当 MySQL 服务器已作为服务安装并且该服务正在运行时,Windows 会在 Windows 关闭时自动停止该服务。还可以使用Services实用程序、sc 停止mysqld_service_name 命令、NET STOP mysqld_service_name 命令或mysqladmin shutdown命令手动停止服务器。

如果您不希望服务在引导过程中自动启动,您还可以选择将服务器安装为手动服务。为此,请使用 --install-manual选项而不是 --install选项:

C:\> "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld" --install-manual
删除服务

要删除作为服务安装的服务器,如果它正在运行,请先通过执行SC STOP mysqld_service_nameNET STOP mysqld_service_name将其停止。然后使用SC DELETE mysqld_service_name删除它:

C:\> SC DELETE mysql

或者,使用mysqld --remove选项删除该服务。

C:\> "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld" --remove

如果mysqld没有作为服务运行,您可以从命令行启动它。有关说明,请参阅 第 2.3.4.6 节,“从 Windows 命令行启动 MySQL”

如果您在安装过程中遇到困难,请参阅 第 2.3.5 节“Microsoft Windows MySQL 服务器安装故障排除”

有关停止或删除 Windows 服务的更多信息,请参阅第 5.7.2.2 节,“将多个 MySQL 实例启动为 Windows 服务”