MySQL 8.0 参考手册  / 第 5 章 MySQL 服务器管理  /  5.8 在一台机器上运行多个MySQL实例

5.8 在一台机器上运行多个MySQL实例

在某些情况下,您可能希望在一台机器上运行多个 MySQL 实例。您可能希望测试新的 MySQL 版本,同时保持现有的生产设置不受干扰。或者您可能希望让不同的用户访问 他们自己管理的不同mysqld服务器。(例如,您可能是一家 Internet 服务提供商,想要为不同的客户提供独立的 MySQL 安装。)

可以对每个实例使用不同的 MySQL 服务器二进制文件,或者对多个实例使用相同的二进制文件,或者两种方法的任意组合。例如,您可以运行 MySQL 5.7 的服务器和 MySQL 8.0 的服务器,以查看不同版本如何处理给定的工作负载。或者您可以运行当前生产版本的多个实例,每个实例管理一组不同的数据库。

无论您是否使用不同的服务器二进制文件,您运行的每个实例都必须为多个操作参数配置唯一值。这消除了实例之间发生冲突的可能性。可以在命令行、选项文件或设置环境变量中设置参数。请参见 第 4.2.2 节,“指定程序选项”。要查看给定实例使用的值,请连接到它并执行一条SHOW VARIABLES语句。

MySQL 实例管理的主要资源是数据目录。每个实例都应使用不同的数据目录,其位置使用该 选项指定。有关使用自己的数据目录配置每个实例的方法,以及有关不这样做的危险的警告,请参阅 第 5.8.1 节,“设置多个数据目录”--datadir=dir_name

除了使用不同的数据目录外,其他几个选项必须对每个服务器实例具有不同的值:

  • --port=port_num

    --port控制 TCP/IP 连接的端口号。或者,如果主机有多个网络地址,您可以设置 bind_address系统变量以使每个服务器侦听不同的地址。

  • --socket={file_name|pipe_name}

    --socket控制 Unix 上的 Unix 套接字文件路径或 Windows 上的命名管道名称。在 Windows 上,只需要为那些配置为允许命名管道连接的服务器指定不同的管道名称。

  • --shared-memory-base-name=name

    此选项仅在 Windows 上使用。它指定 Windows 服务器使用的共享内存名称,以允许客户端使用共享内存进行连接。只需要为那些配置为允许共享内存连接的服务器指定不同的共享内存名称。

  • --pid-file=file_name

    此选项指示服务器写入其进程 ID 的文件的路径名。

如果您使用以下日志文​​件选项,它们的值对于每个服务器必须不同:

有关日志文件选项的进一步讨论,请参阅 第 5.4 节,“MySQL 服务器日志”

为了获得更好的性能,您可以为每个服务器指定以下不同的选项,以在多个物理磁盘之间分配负载:

拥有不同的临时目录还可以更容易地确定哪个 MySQL 服务器创建了任何给定的临时文件。

如果您在不同位置安装了多个 MySQL,则可以使用该 选项为每个安装指定基目录。这会导致每个实例自动使用不同的数据目录、日志文件和 PID 文件,因为每个参数的默认值都是相对于基本目录的。在这种情况下,您需要指定的唯一其他选项是 和 选项。假设您使用 文件二进制分发安装不同版本的 MySQL。它们安装在不同的位置,因此您可以在其相应的基本目录下使用命令bin/mysqld_safe为每个安装启动服务器 。mysqld_safe--basedir=dir_name--socket--porttar--basedir确定传递给 mysqld的正确 选项,您只需要指定 --socket--port选项给 mysqld_safe

如以下各节所述,可以通过指定适当的命令选项或设置环境变量来启动其他服务器。但是,如果您需要更持久地运行多个服务器,使用选项文件为每个服务器指定那些必须唯一的选项值会更方便。该 --defaults-file选项可用于此目的。