在某些情况下,您可能希望在一台计算机上运行多个MySQL实例。您可能想测试新的MySQL版本,同时保持现有的生产设置不变。或者,您可能希望授予不同的用户访问他们自己管理的不同mysqld服务器的权限 。(例如,您可能是一个Internet服务提供商,希望为不同的客户提供独立的MySQL安装。)
每个实例可以使用不同的MySQL服务器二进制文件,也可以对多个实例使用相同的二进制文件,或者两种方法的任意组合。例如,您可能从MySQL 5.7运行一台服务器,从MySQL 8.0运行一台服务器,以查看不同版本如何处理给定的工作负载。或者,您可以运行当前生产版本的多个实例,每个实例管理一组不同的数据库。
无论您是否使用不同的服务器二进制文件,都必须为运行的每个实例配置几个操作参数的唯一值。这消除了实例之间发生冲突的可能性。可以在命令行,选项文件中或通过设置环境变量来设置参数。请参见 第4.2.2节“指定程序选项”。要查看给定实例使用的值,请连接到该实例并执行一条SHOW VARIABLES语句。
MySQL实例管理的主要资源是数据目录。每个实例应使用不同的数据目录,该目录的位置使用 选项指定 。有关使用各自的数据目录配置每个实例的方法以及有关这样做的危险的警告,请参见 第5.8.1节“设置多个数据目录”。 --datadir=*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的文件的路径名。
如果使用以下日志文件选项,则每个服务器的值必须不同:
--general_log_file=*file_name*--log-bin[=*file_name*\]--slow_query_log_file=*file_name*--log-error[=*file_name*\]
有关日志文件选项的进一步讨论,请参见 第5.4节“ MySQL服务器日志”。
为了获得更好的性能,可以为每台服务器分别指定以下选项,以在多个物理磁盘之间分散负载:
使用不同的临时目录还可以更轻松地确定哪个MySQL服务器创建了任何给定的临时文件。
如果在不同位置有多个MySQL安装,则可以使用 选项为每个安装指定基本目录 。这将导致每个实例自动使用不同的数据目录,日志文件和PID文件,因为每个参数的默认值都是相对于基本目录而言的。在这种情况下,您需要指定的唯一其他选项是 and 选项。假设您使用 文件二进制分发版安装了不同版本的MySQL 。这些安装在不同的位置,因此您可以使用命令bin / mysqld_safe在其对应的基本目录下启动每次安装的服务器 。mysqld_safe--basedir=*dir_name*--socket--porttar确定--basedir传递给mysqld的正确 选项 ,您只需要为mysqld_safe指定 --socket和 --port选项 。
如以下各节所述,可以通过指定适当的命令选项或通过设置环境变量来启动其他服务器。但是,如果您需要更长时间地运行多个服务器,则使用选项文件为每个服务器指定必须唯一的选项值更为方便。该 --defaults-file选项可用于此目的。




