在某些情况下,您可能希望在一台机器上运行多个 MySQL 实例。您可能希望测试一个新的 MySQL 版本,同时保持现有的生产设置不受干扰。或者,您可能希望让不同的用户访问他们自己管理的不同 mysqld 服务器。(例如,您可能是一家互联网服务提供商,希望为不同的客户提供独立的 MySQL 安装。)
可以使用每个实例不同的 MySQL 服务器二进制文件,或者使用同一个二进制文件运行多个实例,或者这两种方法的任何组合。例如,您可以在 MySQL 8.4 和 MySQL 9.0 上运行一个服务器,以查看不同版本如何处理给定工作负载。或者,您可以运行当前生产版本的多个实例,每个实例管理一组不同的数据库。
无论您是否使用不同的服务器二进制文件,您运行的每个实例都必须使用几个操作参数的唯一值进行配置。这消除了实例之间发生冲突的可能性。参数可以在命令行、选项文件中设置,也可以通过设置环境变量来设置。请参见 第 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
选项对于此目的很有用。