第5章:数据库管理 / 5.12. 在同一台机器上运行多个MySQL服务器
5.12.1. 在Windows下运行多个服务器
5.12.2. 在Unix中运行多个服务器
5.12.3. 在多服务器环境中使用客户端程序

在一些情况下,你可能想要在同一台机器上运行多个mysqld服务器。你可能想要测试一个新的MySQL发布,同时不影响现有产品的设置。或者,你可能想使不同的用户访问来访问不同的mysqld服务器以便他们自己来管理。(例如,你可能是一个Internet服务提供商,希望为不同的客户来提供独立的MySQL安装)

要想在一个单独的机器上运行多个服务器,每个服务器必须有唯一的各运行参数值。这些值可以在命令行中设置或在选项文件中设置。参见4.3节,“指定程序选项”

至少下面的选项对每个服务器必须是不同的:

·         --port=port_num

--port控制着TCP/IP连接的端口号。

·         --socket=path

--socket控制Unix中的Unix套接字文件路径和在Windows中的命名管道名称。在Windows中,只有支持命名管道连接的服务器才需要明确指定管道名称。

·         --shared-memory-base-name=name

该选项当前只在Windows中使用。它指定Windows服务器使用的、允许客户端通过共享内存来连接的共享内存名。

·         --pid-file=path

该选项只在Unix中使用。它指出服务器在其中写入进程ID的文件名。

如果你使用下面的日志文件选项,对于每个服务器来说,它们必须是不同的:

·           --log=path

·         --log-bin=path

·         --log-update=path

·         --log-error=path

·         --bdb-logdir=path

日志文件选项的描述参见5.11.5节,“日志文件维护”

为了提高性能,你可以为每个服务器指定下面选项的不同的值,以便在物理磁盘之间平均分配负荷:

·         --tmpdir=path

·         --bdb-tmpdir=path

还推荐使用不同的临时目录,以便容易地确定哪个MySQL服务器创建了给定的临时文件。

一般情况,每个服务器应还使用不同的数据目录,可以通过--datadir=path选项来指定。

警告:一般情况,你决不要让两个服务器更新相同数据库中的数据。否则,如果你的操作系统不支持故障排除系统锁定,该可能会导致非常奇怪的结果。如果(不理会该警告)运行的多个服务器使用相同的数据目录并且启用了日志记录,你必须使用适当的选项来为每个服务器指定唯一的日志文件名。否则,服务器尝试用相同的文件来记录日志。请注意这种类型的设置只能在MyISAMMERGE表上工作,对其它任何存储引擎不起作用。

多个服务器共享一个数据目录的警告也适用于NFS环境。允许多个MySQL服务器通过NFS访问一个共同的数据目录是一个非常不好的主义

·         主要问题是NFS存在速度瓶颈。它不是用于这种用途。

·         NFS的另一个冒险是你必须提出一个方法来确保两个或多个服务器不会相互干扰。NFS文件的锁定通常由lockd后台程序处理,但是目前,没有一个运行平台能够在每种情况下100%可靠地进行锁定。

使你更加容易:忘记在服务器之间通过NFS共享数据目录。一个较好的解决方案是使用包含几个CPU并且和使用有效处理多线程的操作系统的机器。

如果在不同的位置有多个MySQL的安装,一般情况可以用--basedir=path选项为每个服务器指定基本安装目录,使每个服务器使用不同的数据目录、日志文件和PID文件。(所有这些值的 默认值相对于根目录来确定)。那样的话, 你唯一需要指定的其它选项是--socket--port选项。例如,假如使用tar文件二进制分发版安装不同的MySQL版本。这些安装在不同的位置,因此可以使用各个安装服务器相应的根目录中的bin/mysqld_safe命令启动服务器。mysqld_safe确定正确的--basedir选项传递给mysqld,你仅需要为mysqld_safe指定--socket--port选项。

正如下面几节所讨论的那样,可以通过设置环境变量或用指定的命令行选项来启动更多的服务器。但是,如果你需要在一个更稳定的基础上运行多个服务器,一个更方便的方法是使用选项文件来为每个服务器指定那些选项值,它对每个服务器必须是唯一的。