5.7.3 在 Unix 上运行多个 MySQL 实例

Note

此处的讨论使用mysqld_safe启动多个 MySQL 实例。对于使用 RPM 发行版的 MySQL 安装,服务器的启动和关闭由 systemd 在多个 Linux 平台上进行 Management。在这些平台上,未安装mysqld_safe,因为它是不必要的。有关使用 systemd 处理多个 MySQL 实例的信息,请参见第 2.5.10 节“使用 systemdManagementMySQL 服务器”

一种方法是在 Unix 上运行多个 MySQL 实例,即使用不同的默认 TCP/IP 端口和 Unix 套接字文件编译不同的服务器,以便每个服务器侦听不同的网络接口。对于每个安装,在不同的基本目录中编译还会自动为每个服务器生成单独的,已编译的数据目录,日志文件和 PID 文件位置。

假设为默认的 TCP/IP 端口号(3306)和 Unix 套接字文件(/tmp/mysql.sock)配置了一个现有的 5.6 服务器。要将新的 5.7.32 服务器配置为具有不同的操作参数,请使用类似以下命令的 CMake 命令:

shell> cmake . -DMYSQL_TCP_PORT=port_number \
             -DMYSQL_UNIX_ADDR=file_name \
             -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.32

在这里,* port_number file_name *必须与默认的 TCP/IP 端口号和 Unix 套接字文件路径名不同,并且CMAKE_INSTALL_PREFIX值应指定与现有 MySQL 安装所在的安装目录不同的安装目录。

如果您有一个正在侦听给定端口号的 MySQL 服务器,则可以使用以下命令来查找它对于几个重要的可配置变量(包括基本目录和 Unix 套接字文件名)所使用的操作参数:

shell> mysqladmin --host=host_name --port=port_number variables

使用该命令显示的信息,您可以知道在配置其他服务器时不使用哪些选项值。

如果您指定localhost作为主机名,则mysqladmin默认使用 Unix 套接字文件而不是 TCP/IP。要明确指定传输协议,请使用--protocol={TCP|SOCKET|PIPE|MEMORY}选项。

您不必仅以其他 Unix 套接字文件和 TCP/IP 端口号开始就编译新的 MySQL 服务器。也可以使用相同的服务器二进制文件,并在运行时以不同的参数值开始对其的每次调用。一种方法是使用命令行选项:

shell> mysqld_safe --socket=file_name --port=port_number

要启动第二台服务器,请提供不同的--socket--port选项值,并将--datadir=dir_name选项传递给mysqld_safe,以便服务器使用其他数据目录。

或者,将每个服务器的选项放在不同的选项文件中,然后使用--defaults-file选项启动每个服务器,该选项指定适当选项文件的路径。例如,如果两个服务器实例的选项文件分别命名为/usr/local/mysql/my.cnf/usr/local/mysql/my.cnf2,则按如下所示启动服务器:命令:

shell> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf
shell> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf2

实现类似效果的另一种方法是使用环境变量来设置 Unix 套接字文件名和 TCP/IP 端口号:

shell> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock
shell> MYSQL_TCP_PORT=3307
shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT
shell> mysqld --initialize --user=mysql
...set root password...
shell> mysqld_safe --datadir=/path/to/datadir &

这是启动第二台服务器进行测试的快速方法。关于此方法的好处是,环境变量设置适用于您从同一 shell 调用的任何 Client 端程序。因此,这些 Client 端的连接将自动定向到第二台服务器。

第 4.9 节“环境变量”,包括可用于影响 MySQL 程序的其他环境变量的列 table。

在 Unix 上,mysqld_multi脚本提供了另一种启动多个服务器的方法。参见第 4.3.4 节“ mysqld_multi-Management 多个 MySQL 服务器”