在某些情况下,您可能想在一台机器上运行多个 MySQL 实例。您可能想测试新的 MySQL 版本,同时不影响现有的生产设置。或者,您可能想让不同的用户访问不同的 mysqld 服务器,这些服务器由他们自己管理。(例如,您可能是一个互联网服务提供商,想为不同的客户提供独立的 MySQL 安装。)
可以使用不同的 MySQL 服务器二进制文件每个实例,或者使用同一个二进制文件多个实例,或者使用这两种方法的组合。例如,您可能想运行一个来自 MySQL 8.2 的服务器和一个来自 MySQL 8.3 的服务器,以查看不同版本如何处理给定的工作负载。或者,您可能想运行多个实例当前的生产版本,每个实例管理不同的数据库集。
无论您是否使用不同的服务器二进制文件,每个实例都必须配置为具有唯一的操作参数值,以避免实例之间的冲突。参数可以在命令行、选项文件或环境变量中设置。请参阅 第 6.2.2 节,“指定程序选项”。要查看给定实例使用的值,请连接到该实例并执行 SHOW VARIABLES
语句。
MySQL 实例管理的主要资源是数据目录。每个实例都应该使用不同的数据目录,该目录的位置使用 --datadir=
选项指定。有关配置每个实例以使用其自己的数据目录的方法,以及未能这样做的危险,请参阅 第 7.8.1 节,“设置多个数据目录”。dir_name
除了使用不同的数据目录之外,还有几个选项必须具有不同的值 для每个服务器实例:
-
--port
控制 TCP/IP 连接的端口号。或者,如果主机具有多个网络地址,可以设置bind_address
系统变量,以使每个服务器监听不同的地址。 -
--socket={
file_name
|pipe_name
}--socket
控制 Unix 套接字文件路径在 Unix 或命名管道名称在 Windows。 在 Windows 上,只有那些配置为允许命名管道连接的服务器需要指定不同的管道名称。 -
--shared-memory-base-name=
name
该选项仅在 Windows 上使用。它指定了 Windows 服务器使用的共享内存名称,以便客户端使用共享内存连接。只有那些配置为允许共享内存连接的服务器需要指定不同的共享内存名称。
-
该选项指定服务器写入其进程 ID 的文件路径名称。
如果您使用以下日志文件选项,则每个服务器的值必须不同:
有关日志文件选项的进一步讨论,请参阅 第 7.4 节,“MySQL 服务器日志”。
为了获得更好的性能,您可以为每个服务器指定以下选项,以便在多个物理磁盘之间分配负载:
拥有不同的临时目录也使得确定哪个 MySQL 服务器创建了任何给定的临时文件变得更容易。
如果您在不同的位置安装了多个 MySQL 安装,可以使用 --basedir=
选项指定每个安装的基本目录。这将导致每个实例自动使用不同的数据目录、日志文件和 PID 文件,因为这些参数的默认值是相对于基本目录的。在那种情况下,您只需要指定 目录名
--socket
和 --port
选项。假设您使用 tar
文件二进制分布式安装了不同的 MySQL 版本。这些安装在不同的位置,因此您可以使用命令 bin/mysqld_safe 在每个基本目录下启动服务器。 mysqld_safe 确定要传递给 mysqld 的正确 --basedir
选项,只需要指定 --socket
和 --port
选项给 mysqld_safe。
如以下部分所讨论的那样,可以通过指定适当的命令选项或设置环境变量来启动附加服务器。但是,如果您需要在更长期的基础上运行多个服务器,那么使用选项文件来指定每个服务器的唯一选项值将更加方便。--defaults-file
选项对此非常有用。