注意
此处的讨论使用mysqld_safe启动多个MySQL实例。对于使用RPM发行版的MySQL安装,服务器的启动和关闭由systemd在多个Linux平台上进行管理。在这些平台上, 未安装mysqld_safe,因为它是不必要的。有关使用systemd处理多个MySQL实例的信息,请参见第2.5.9节“使用systemd管理MySQL Server”。
一种方法是在Unix上运行多个MySQL实例,即使用不同的默认TCP / IP端口和Unix套接字文件编译不同的服务器,以便每个服务器侦听不同的网络接口。对于每个安装,在不同的基本目录中编译还会自动为每个服务器生成单独的,已编译的数据目录,日志文件和PID文件位置。

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

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

在此,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> bin/mysqld --initialize --user=mysql
shell> mysqld_safe --datadir=/path/to/datadir &

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

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

在Unix上,mysqld_multi脚本提供了另一种启动多个服务器的方法。

在多服务器环境中使用客户端程序

要将客户端程序连接到正在侦听与编译到客户端的网络接口不同的网络接口的MySQL服务器,可以使用以下方法之一:

使用--host=host_name--port=port_number启动客户端,使用TCP/IP连接到远程服务器;使用--host=127.0.0.1--port=port_number连接到本地服务器;使用--host=localhost--socket=file_name启动客户端,使用Unix套接字文件或Windows命名管道连接到本地服务器。

启动客户端 --protocol=TCP以使用TCP/IP --protocol=SOCKET进行连接,使用Unix套接字文件 --protocol=PIPE进行连接,使用命名管道--protocol=MEMORY进行连接或 使用共享内存进行连接。对于TCP / IP连接,您可能还需要指定--host和 --port选项。对于其他类型的连接,可能需要指定一个 --socket选项来指定Unix套接字文件或Windows命名管道名称,或者一个 --shared-memory-base-name 选项来指定共享内存名称。共享内存连接仅在Windows上受支持。

在Unix上,在启动客户端之前,将MYSQL_UNIX_PORT和 MYSQL_TCP_PORT环境变量设置为指向Unix套接字文件和TCP / IP端口号。如果您通常使用特定的套接字文件或端口号,则可以放置命令以在.login文件中设置这些环境变量,以便它们在每次登录时都适用。请参见 第4.9节“环境变量”。

在[client]选项文件的组中指定默认的Unix套接字文件和TCP / IP端口号。例如,可以C:\my.cnf在Windows上使用,也可以.my.cnf在Unix上的主目录中使用。请参见第4.2.2.2节“使用选项文件”。

在C程序中,可以在mysql_real_connect()调用中指定套接字文件或端口号参数 。您也可以通过调用使程序读取选项文件 mysql_options()。请参见 第28.6.6节“ C API函数描述”。

如果使用Perl DBD::mysql 模块,则可以从MySQL选项文件中读取选项。例如:

$dsn = "DBI:mysql:test;mysql_read_default_group=client;"
        . "mysql_read_default_file=/usr/local/mysql/data/my.cnf";
$dbh = DBI->connect($dsn, $user, $password);

其他编程接口可以提供类似的功能来读取选项文件。