7.8.2.2 在 Windows 上将多个 MySQL 实例作为 Windows 服务启动
在 Windows 上,MySQL 服务器可以运行为 Windows 服务。安装、控制和删除单个 MySQL 服务的步骤在第2.3.3.8节,“Starting MySQL as a Windows Service”中有描述。
要设置多个 MySQL 服务,您必须确保每个实例使用不同的服务名称,除了其他参数之外,还需要在每个实例之间保持唯一性。
以下示例假设您想从两个不同版本的 MySQL 安装(C:\mysql-5.7.9
和 C:\mysql-8.4.0
)运行mysqld 服务器。 (这可能是您在生产环境中使用 5.7.9,但同时想使用 8.4.0 进行测试的情况。)
要将 MySQL 安装为 Windows 服务,请使用 --install
或 --install-manual
选项。关于这些选项的信息,请见第2.3.3.8节,“Starting MySQL as a Windows Service”。
根据前面的信息,您有多种方式来设置多个服务。以下示例描述了一些示例。在尝试任何这些示例之前,请先关闭和删除现有的 MySQL 服务。
-
方法1: 将所有服务的选项指定到标准选项文件中。为此,您可以使用不同的服务名称来运行每个服务器。假设您想使用 5.7.9 mysqld 使用服务名称
mysqld1
,并使用 8.4.0 mysqld 使用服务名称mysqld2
。在这种情况下,您可以使用[mysqld1]
组件来指定 5.7.9 的选项,并使用[mysqld2]
组件来指定 8.4.0 的选项。例如,您可以将C:\my.cnf
设置为以下内容:# options for mysqld1 service [mysqld1] basedir = C:/mysql-5.7.9 port = 3307 enable-named-pipe socket = mypipe1 # options for mysqld2 service [mysqld2] basedir = C:/mysql-8.4.0 port = 3308 enable-named-pipe socket = mypipe2
安装服务时,请使用完整的服务器路径名称,以确保 Windows 注册了正确的可执行程序每个服务:
C:\> C:\mysql-5.7.9\bin\mysqld --install mysqld1 C:\> C:\mysql-8.4.0\bin\mysqld --install mysqld2
要启动服务,请使用服务管理器,或者使用NET START或SC START与适当的服务名称:
C:\> SC START mysqld1 C:\> SC START mysqld2
要停止服务,请使用服务管理器,或者使用NET STOP或SC STOP与适当的服务名称:
C:\> SC STOP mysqld1 C:\> SC STOP mysqld2
-
方法2: 将每个服务器的选项指定到单独的文件中,并使用
--defaults-file
在安装服务时告诉每个服务器使用哪个文件。在这种情况下,每个文件都应该列出选项,使用[mysqld]
组件。使用这种方法来指定5.7.9mysqld的选项,创建一个文件
C:\my-opts1.cnf
,其内容如下:[mysqld] basedir = C:/mysql-5.7.9 port = 3307 enable-named-pipe socket = mypipe1
对于8.4.0mysqld,创建一个文件
C:\my-opts2.cnf
,其内容如下:[mysqld] basedir = C:/mysql-8.4.0 port = 3308 enable-named-pipe socket = mypipe2
按照以下步骤安装服务(每个命令在单行中输入):
C:\> C:\mysql-5.7.9\bin\mysqld --install mysqld1 --defaults-file=C:\my-opts1.cnf C:\> C:\mysql-8.4.0\bin\mysqld --install mysqld2 --defaults-file=C:\my-opts2.cnf
当您使用
--defaults-file
选项安装MySQL服务器作为服务时,服务名称必须在选项之前。安装服务后,启动和停止它们的方式与前一个示例相同。
要删除多个服务,请使用SC DELETE mysqld_service_name
对每个服务。Alternatively,使用mysqld --remove对每个服务,指定一个服务名称,后跟--remove
选项。如果服务名称是默认值(MySQL
),可以在使用mysqld --remove时省略它。