5.7.2.2 作为 Windows 服务启动多个 MySQL 实例

在 Windows 上,MySQL 服务器可以作为 Windows 服务运行。 第 2.3.4.8 节“将 MySQL 作为 Windows 服务启动”中描述了安装,控制和删除单个 MySQL 服务的过程。

要设置多个 MySQL 服务,除了每个实例必须具有唯一性的其他参数之外,还必须确保每个实例使用不同的服务名称。

对于以下说明,假设您要从分别安装在C:\mysql-5.5.9C:\mysql-5.7.32的两个不同版本的 MySQL 中运行mysqld服务器。 (如果您将 5.5.9 作为生产服务器运行,但又想使用 5.7.32 进行测试,则可能是这种情况.)

要将 MySQL 作为 Windows 服务安装,请使用--install--install-manual选项。有关这些选项的信息,请参见第 2.3.4.8 节“将 MySQL 作为 Windows 服务启动”

根据前面的信息,您可以通过多种方法来设置多个服务。以下说明描述了一些示例。在尝试使用它们之前,请关闭并删除任何现有的 MySQL 服务。

  • 方法 1: 在标准选项文件之一中指定所有服务的选项。为此,请对每个服务器使用不同的服务名称。假设您要使用mysqld1服务名称运行 5.5.9 mysqld,并使用mysqld2服务名称运行 5.7.32 mysqld。在这种情况下,可以将[mysqld1]组用于 5.5.9,将[mysqld2]组用于 5.7.32. 例如,您可以这样设置C:\my.cnf
# options for mysqld1 service
[mysqld1]
basedir = C:/mysql-5.5.9
port = 3307
enable-named-pipe
socket = mypipe1

# options for mysqld2 service
[mysqld2]
basedir = C:/mysql-5.7.32
port = 3308
enable-named-pipe
socket = mypipe2

使用完整的服务器路径名,如下安装服务,以确保 Windows 为每个服务注册正确的可执行程序:

C:\> C:\mysql-5.5.9\bin\mysqld --install mysqld1
C:\> C:\mysql-5.7.32\bin\mysqld --install mysqld2

要启动服务,请使用服务 Management 器,或者使用具有适当服务名称的 NET START 或 SC START 来:

C:\> SC START mysqld1
C:\> SC START mysqld2

要停止服务,请使用服务 Management 器,或对适当的服务名称使用 NET STOP 或 SC STOP。

C:\> SC STOP mysqld1
C:\> SC STOP mysqld2
  • 方法 2: 在单独的文件中为每个服务器指定选项,并在安装服务时使用--defaults-file告诉每个服务器要使用的文件。在这种情况下,每个文件都应使用[mysqld]组列出选项。

使用这种方法,要为 5.5.9 mysqld指定选项,请创建一个如下所示的文件C:\my-opts1.cnf

[mysqld]
basedir = C:/mysql-5.5.9
port = 3307
enable-named-pipe
socket = mypipe1

对于 5.7.32 mysqld,创建如下所示的文件C:\my-opts2.cnf

[mysqld]
basedir = C:/mysql-5.7.32
port = 3308
enable-named-pipe
socket = mypipe2

如下安装服务(在一行中 Importing 每个命令):

C:\> C:\mysql-5.5.9\bin\mysqld --install mysqld1
           --defaults-file=C:\my-opts1.cnf
C:\> C:\mysql-5.7.32\bin\mysqld --install mysqld2
           --defaults-file=C:\my-opts2.cnf

当您将 MySQL 服务器安装为服务并使用--defaults-file选项时,服务名称必须在该选项之前。

安装服务后,以与前面的示例相同的方式启动和停止它们。

要删除多个服务,请对每个服务使用 SC DELETE * mysqld_service_name *。或者,对每个参数使用mysqld --remove,并在--remove选项后指定服务名称。如果服务名称是默认名称(MySQL),则可以在使用mysqld --remove时将其忽略。