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

[5.8.1 设置多个数据目录](multiple-data-directories.html)
[5.8.2 在 Windows 上运行多个 MySQL 实例](multiple-windows-servers.html)
[5.8.3 在 Unix 上运行多个 MySQL 实例](multiple-unix-servers.html)
[5.8.4 在多服务器环境中使用客户端程序](multiple-server-clients.html)

[](<>)[](<>)[](<>)[](<>)[](<>)

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

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

无论您是否使用不同的服务器二进制文件，您运行的每个实例都必须为多个操作参数配置唯一值。这消除了实例之间发生冲突的可能性。可以在命令行、选项文件或通过设置环境变量来设置参数。看[第 4.2.2 节，“指定程序选项”](program-options.html).要查看给定实例使用的值，请连接到它并执行[`显示变量`](show-variables.html)陈述。

MySQL 实例管理的主要资源是数据目录。每个实例应使用不同的数据目录，其位置使用[`--datadir=*`目录名`*`](server-system-variables.html#sysvar_datadir)选项。有关使用自己的数据目录配置每个实例的方法，以及有关不这样做的危险的警告，请参阅[第 5.8.1 节，“设置多个数据目录”](multiple-data-directories.html).

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

-   [`--端口=*`端口号`*`](server-options.html#option_mysqld_port)

    [](<>)

    [`- 港口`](server-options.html#option_mysqld_port)控制 TCP/IP 连接的端口号。或者，如果主机有多个网络地址，您可以设置[`绑定地址`](server-system-variables.html#sysvar_bind_address)系统变量以使每个服务器侦听不同的地址。

-   [`--socket={*`文件名`*|*`管道名称`*}`](server-options.html#option_mysqld_socket)

    [`- 插座`](server-options.html#option_mysqld_socket)控制 Unix 上的 Unix 套接字文件路径或 Windows 上的命名管道名称。在 Windows 上，只需要为那些配置为允许命名管道连接的服务器指定不同的管道名称。

-   [`--shared-memory-base-name=*`姓名`*`](server-system-variables.html#sysvar_shared_memory_base_name)

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

-   [`--pid 文件=*`文件名`*`](server-system-variables.html#sysvar_pid_file)

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

    如果您使用以下日志文​​件选项，则每个服务器的值必须不同：

-   [`--general_log_file=*`文件名`*`](server-system-variables.html#sysvar_general_log_file)

-   [`--log-bin[=*`文件名`*]`](replication-options-binary-log.html#option_mysqld_log-bin)

-   [`--slow_query_log_file=*`文件名`*`](server-system-variables.html#sysvar_slow_query_log_file)

-   [`--日志错误[=*`文件名`*]`](server-options.html#option_mysqld_log-error)

    有关日志文件选项的进一步讨论，请参阅[第 5.4 节，“MySQL 服务器日志”](server-logs.html).

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

-   [`--tmpdir=*`目录名`*`](server-options.html#option_mysqld_tmpdir)

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

    如果您在不同位置有多个 MySQL 安装，您可以使用[`--basedir=*`目录名`*`](server-system-variables.html#sysvar_basedir)选项。这会导致每个实例自动使用不同的数据目录、日志文件和 PID 文件，因为这些参数中的每一个的默认值都是相对于基本目录的。在这种情况下，您需要指定的唯一其他选项是[`- 插座`](server-options.html#option_mysqld_socket)和[`- 港口`](server-options.html#option_mysqld_port)选项。假设您使用安装不同版本的 MySQL`柏油`文件二进制分发。它们安装在不同的位置，因此您可以使用命令为每个安装启动服务器**斌/mysqld\_安全的**在其相应的基本目录下。[**mysqld\_安全的**](mysqld-safe.html)确定合适的[`--basedir`](server-system-variables.html#sysvar_basedir)传递给的选项[**mysqld**](mysqld.html)，并且您只需要指定[`- 插座`](mysqld-safe.html#option_mysqld_safe_socket)和[`- 港口`](mysqld-safe.html#option_mysqld_safe_port)选项[**mysqld\_安全的**](mysqld-safe.html).

    如以下部分所述，可以通过指定适当的命令选项或设置环境变量来启动其他服务器。但是，如果您需要更永久地运行多个服务器，使用选项文件为每个服务器指定必须唯一的选项值会更方便。这[`--defaults 文件`](option-file-options.html#option_general_defaults-file)选项对此很有用。
