7.8 在一台机器上运行多个 MySQL 实例
在某些情况下,您可能想在单个机器上运行多个 MySQL 实例。您可能想测试新的 MySQL 发布版本,而不影响现有生产设置。或者,您可能想为不同用户提供不同的mysqld服务器,让他们自己管理这些服务器。 (例如,您可能是 Internet 服务提供商,想为不同客户提供独立的 MySQL 安装程序。)
可以使用不同的 MySQL 服务器二进制文件实例,每个实例都可以使用同一个二进制文件,也可以组合这两种方法。例如,您可能会运行 MySQL 8.3 和 MySQL 8.4 的服务器,以查看不同版本如何处理给定的工作负载。或者,您可能会运行当前生产版本的多个实例,每个实例管理不同的数据库集。
无论您是否使用独特的服务器二进制文件,每个实例都必须配置唯一的操作参数值。这可以消除实例之间的冲突。参数可以在命令行、选项文件或环境变量中设置。见第6.2.2节,“指定程序选项”。要查看给定实例的值,请连接到该实例并执行一个SHOW VARIABLES
语句。
MySQL 实例的主要资源是数据目录。每个实例都应该使用不同的数据目录,位置由--datadir=
选项指定。关于配置每个实例的数据目录方法和警告,请见第7.8.1节,“设置多个数据目录”。dir_name
除了使用不同的数据目录外,还有几个其他选项必须为每个服务器实例设置不同的值:
如果您使用以下日志文件选项,它们的值必须不同于每个服务器:
关于日志文件选项的进一步讨论,请见第7.4节,“MySQL 服务器日志”。
为了提高性能,您可以将以下选项分别指定给每个服务器,以便将负载分配到多个物理磁盘上:
不同的临时目录也使得更容易确定哪个 MySQL 服务器创建了任何给定的临时文件。
如果您在不同的位置安装了多个MySQL实例,可以使用--basedir=
选项指定每个实例的基础目录。这会导致每个实例自动使用不同的数据目录、日志文件和PID文件,因为这些参数的默认值相对于基础目录。在这种情况下,您需要指定的唯一其他选项是dir_名称
--socket
和--port
选项。假设您使用tar
文件二进制分发安装不同的MySQL版本,这些安装在不同的位置,因此可以使用每个实例的相应基础目录下的命令bin/mysqld_safe启动服务器。mysqld_safe会确定合适的--basedir
选项传递给mysqld,因此您只需要指定--socket
和--port
选项给mysqld_safe.
如前几节所讨论的那样,可以通过指定合适的命令选项或设置环境变量来启动额外的服务器。然而,如果您需要在更长期内运行多个服务器,使用选项文件指定每个服务器的唯一选项值更加方便。有用的--defaults-file
选项用于这个目的。