这里的讨论使用 mysqld_safe 启动多个 MySQL 实例。对于使用 RPM 分发的 MySQL 安装,服务器启动和关闭由 systemd 在几个 Linux 平台上管理。在这些平台上,mysqld_safe 不被安装,因为它是不必要的。关于使用 systemd 管理多个 MySQL 实例的信息,请参阅 第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”。
在 Unix 上运行多个 MySQL 实例的一种方法是编译不同的服务器,以不同的默认 TCP/IP 端口号和 Unix 套接字文件,使每个服务器监听不同的网络接口。编译到不同的基本目录下也将自动结果在不同的编译数据目录、日志文件和 PID 文件位置。
假设现有的 8.2 服务器配置为默认的 TCP/IP 端口号(3306)和 Unix 套接字文件 (/tmp/mysql.sock
)。要配置新的 8.3.0 服务器以不同的操作参数,使用类似以下的 CMake 命令:
$> cmake . -DMYSQL_TCP_PORT=port_number \
-DMYSQL_UNIX_ADDR=file_name \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8.3.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 服务器”。