这里的讨论使用 mysqld_safe 来启动多个 MySQL 实例。对于使用 RPM 发行版安装的 MySQL,在多个 Linux 平台上,服务器的启动和关闭由 systemd 管理。在这些平台上,mysqld_safe 未安装,因为它是不必要的。有关使用 systemd 处理多个 MySQL 实例的信息,请参阅第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”。
在 Unix 上运行多个 MySQL 实例的一种方法是使用不同的默认 TCP/IP 端口和 Unix 套接字文件编译不同的服务器,以便每个服务器侦听不同的网络接口。在每个安装的不同基目录中编译也会自动导致每个服务器具有单独的、编译后的数据目录、日志文件和 PID 文件位置。
假设现有 8.4 服务器配置为默认 TCP/IP 端口号 (3306) 和 Unix 套接字文件 (/tmp/mysql.sock
)。要将新的 9.0.0 服务器配置为具有不同的操作参数,请使用如下所示的 CMake 命令
$> cmake . -DMYSQL_TCP_PORT=port_number \
-DMYSQL_UNIX_ADDR=file_name \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-9.0.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}
选项。
您无需仅仅为了使用不同的 Unix 套接字文件和 TCP/IP 端口号启动而编译新的 MySQL 服务器。也可以使用相同的服务器二进制文件,并在运行时使用不同的参数值启动它的每个调用。一种方法是使用命令行选项
$> 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 服务器”。