在某些情况下,您可能希望在一台机器上运行多个 MySQL 实例。您可能希望测试新的 MySQL 版本,同时保持现有的生产环境不受影响。或者您可能希望让不同的用户访问他们自己管理的不同 mysqld 服务器。(例如,您可能是希望为不同的客户提供独立的 MySQL 安装的互联网服务提供商。)
可以为每个实例使用不同的 MySQL 服务器二进制文件,或者对多个实例使用相同的二进制文件,或者两种方法的任意组合。例如,您可以运行一个来自 MySQL 8.3 的服务器和一个来自 MySQL 8.4 的服务器,以查看不同版本如何处理给定的工作负载。或者您可以在当前生产版本中运行多个实例,每个实例管理不同的数据库集。
无论您是否使用不同的服务器二进制文件,您运行的每个实例都必须配置为几个运行参数具有唯一值。这消除了实例之间潜在的冲突。可以在命令行、选项文件中或通过设置环境变量来设置参数。请参阅 第 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 文件,因为这些参数的默认值都是相对于基本目录的。在这种情况下,您只需要指定的其他选项是 dir_name
--socket
和 --port
选项。假设您使用 tar
文件二进制发行版安装了不同版本的 MySQL。这些安装位于不同的位置,因此您可以使用其对应基本目录下的命令 bin/mysqld_safe 启动每个安装的服务器。 mysqld_safe 会确定传递给 mysqld 的正确 --basedir
选项,您只需为 mysqld_safe 指定 --socket
和 --port
选项。
如以下部分所述,可以通过指定适当的命令选项或设置环境变量来启动其他服务器。但是,如果您需要更永久地运行多个服务器,使用选项文件为每个服务器指定其唯一的选项值会更方便。 --defaults-file
选项为此目的很有用。