此处的讨论使用 mysqld_safe 启动多个 MySQL 实例。对于使用 RPM 发行版安装的 MySQL,服务器启动和关闭由多个 Linux 平台上的 systemd 管理。在这些平台上,mysqld_safe 未安装,因为它不是必需的。有关使用 systemd 处理多个 MySQL 实例的信息,请参阅 第 2.5.9 节“使用 systemd 管理 MySQL 服务器”。
在 Unix 上运行多个 MySQL 实例的一种方法是使用不同的默认 TCP/IP 端口和 Unix 套接字文件编译不同的服务器,以便每个服务器侦听不同的网络接口。在每个安装的不同基本目录中进行编译还会自动为每个服务器生成单独的、编译后的数据目录、日志文件和 PID 文件位置。
假设现有的 8.3 服务器配置为默认 TCP/IP 端口号 (3306) 和 Unix 套接字文件 (/tmp/mysql.sock
)。要将新的 8.4.0 服务器配置为具有不同的操作参数,请使用类似于以下内容的 CMake 命令
$> cmake . -DMYSQL_TCP_PORT=port_number \
-DMYSQL_UNIX_ADDR=file_name \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8.4.0
此处,port_number
和 file_name
必须与默认 TCP/IP 端口号和 Unix 套接字文件路径名不同,并且 CMAKE_INSTALL_PREFIX
值应指定与现有 MySQL 安装所在的目录不同的安装目录。
如果您的 MySQL 服务器正在侦听给定的端口号,则可以使用以下命令找出它为几个重要的可配置变量(包括基本目录和 Unix 套接字文件名)使用的操作参数
$> mysqladmin --host=host_name --port=port_number variables
使用该命令显示的信息,您可以知道在配置其他服务器时不要使用哪些选项值。
如果将 localhost
指定为主机名,则 mysqladmin 默认使用 Unix 套接字文件而不是 TCP/IP。要显式指定传输协议,请使用 --protocol={TCP|SOCKET|PIPE|MEMORY}
选项。
您无需编译新的 MySQL 服务器即可使用不同的 Unix 套接字文件和 TCP/IP 端口号启动。也可以使用相同的服务器二进制文件,并在运行时使用不同的参数值启动它的每个调用。一种方法是使用命令行选项
$> mysqld_safe --socket=file_name --port=port_number
要启动第二个服务器,请提供不同的 --socket
和 --port
选项值,并将 --datadir=
选项传递给 mysqld_safe,以便服务器使用不同的数据目录。dir_name
或者,将每个服务器的选项放在不同的选项文件中,然后使用指定相应选项文件路径的 --defaults-file
选项启动每个服务器。例如,如果两个服务器实例的选项文件名为 /usr/local/mysql/my.cnf
和 /usr/local/mysql/my.cnf2
,则按如下方式启动服务器:命令
$> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf
$> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf2
实现类似效果的另一种方法是使用环境变量来设置 Unix 套接字文件名和 TCP/IP 端口号
$> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock
$> MYSQL_TCP_PORT=3307
$> export MYSQL_UNIX_PORT MYSQL_TCP_PORT
$> bin/mysqld --initialize --user=mysql
$> mysqld_safe --datadir=/path/to/datadir &
这是一种快速启动第二个服务器进行测试的方法。此方法的优点是环境变量设置适用于您从同一 shell 调用的任何客户端程序。因此,这些客户端的连接会自动定向到第二个服务器。
第 6.9 节“环境变量” 包含您可以用来影响 MySQL 程序的其他环境变量列表。
在 Unix 上,mysqld_multi 脚本提供了另一种启动多个服务器的方法。请参阅 第 6.3.4 节“mysqld_multi - 管理多个 MySQL 服务器”。