mysqld_multi 旨在管理多个 mysqld 进程,这些进程监听不同 Unix 套接字文件和 TCP/IP 端口上的连接。它可以启动或停止服务器,或报告其当前状态。
对于某些 Linux 平台,从 RPM 或 Debian 软件包安装 MySQL 包括对管理 MySQL 服务器启动和关闭的 systemd 支持。在这些平台上,mysqld_multi 未安装,因为它是不必要的。有关使用 systemd 处理多个 MySQL 实例的信息,请参阅 第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”。
mysqld_multi 在 my.cnf
(或 --defaults-file
选项命名的文件中)中搜索名为 [mysqld
的组。N
]N
可以是任何正整数。此数字在下文中称为选项组号,或 GNR
。组号用于区分选项组,并用作 mysqld_multi 的参数,以指定要启动、停止或获取其状态报告的服务器。这些组中列出的选项与您在用于启动 mysqld 的 [mysqld]
组中使用的选项相同。(例如,请参阅 第 2.9.5 节,“自动启动和停止 MySQL”。)但是,在使用多个服务器时,每个服务器必须对 Unix 套接字文件和 TCP/IP 端口号等选项使用自己的值。有关在多服务器环境中每个服务器必须唯一的选项的更多信息,请参阅 第 7.8 节,“在一台机器上运行多个 MySQL 实例”。
要调用 mysqld_multi,请使用以下语法
mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]
start
、stop
、reload
(停止并重新启动)和 report
指示要执行的操作。您可以对单个服务器或多个服务器执行指定的操作,具体取决于选项名称后面的 GNR
列表。如果没有列表,mysqld_multi 将对选项文件中的所有服务器执行该操作。
每个 GNR
值表示一个选项组号或组号范围。该值应为选项文件中组名末尾的数字。例如,名为 [mysqld17]
的组的 GNR
为 17
。要指定一个数字范围,请用短划线分隔第一个和最后一个数字。GNR
值 10-13
表示从 [mysqld10]
到 [mysqld13]
的组。可以在命令行中指定多个组或组范围,并用逗号分隔。GNR
列表中不能有空格字符(空格或制表符);空格字符后面的任何内容都将被忽略。
此命令使用选项组 [mysqld17]
启动单个服务器
mysqld_multi start 17
此命令停止多个服务器,使用选项组 [mysqld8]
以及从 [mysqld10]
到 [mysqld13]
的组
mysqld_multi stop 8,10-13
有关如何设置选项文件的示例,请使用以下命令
mysqld_multi --example
mysqld_multi 按如下方式搜索选项文件
使用
--no-defaults
时,不会读取任何选项文件。命令行格式 --no-defaults
类型 布尔值 默认值 false
使用
--defaults-file=
时,仅读取命名的文件。file_name
命令行格式 --defaults-file=filename
类型 文件名 默认值 [无]
否则,将读取标准位置列表中的选项文件,包括
--defaults-extra-file=
选项命名的任何文件(如果给出)。(如果多次给出该选项,则使用最后一个值。)file_name
命令行格式 --defaults-extra-file=filename
类型 文件名 默认值 [无]
有关这些选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
将搜索读取的选项文件以查找 [mysqld_multi]
和 [mysqld
选项组。N
][mysqld_multi]
组可用于 mysqld_multi 本身的选项。[mysqld
组可用于传递给特定 mysqld 实例的选项。N
]
[mysqld]
或 [mysqld_safe]
组可用于所有 mysqld 或 mysqld_safe 实例读取的通用选项。您可以指定 --defaults-file=
选项,以便为该实例使用不同的配置文件,在这种情况下,将使用该文件中 file_name
[mysqld]
或 [mysqld_safe]
组中的选项。
mysqld_multi 支持以下选项。
-
命令行格式 --help
类型 布尔值 默认值 false
显示帮助消息并退出。
-
命令行格式 --example
类型 布尔值 默认值 false
显示示例选项文件。
-
命令行格式 --log=路径
类型 文件名 默认值 /var/log/mysqld_multi.log
指定日志文件的名称。如果文件存在,则将日志输出追加到该文件。
-
命令行格式 --mysqladmin=文件
类型 文件名 默认值 [无]
用于停止服务器的 mysqladmin 二进制文件。
-
命令行格式 --mysqld=文件
类型 文件名 默认值 [无]
要使用的 mysqld 二进制文件。请注意,您也可以指定 mysqld_safe 作为此选项的值。如果您使用 mysqld_safe 启动服务器,则可以在相应的
[mysqld
选项组中包含N
]mysqld
或ledir
选项。这些选项指示 mysqld_safe 应启动的服务器的名称以及服务器所在目录的路径名。(请参阅 第 6.3.2 节“mysqld_safe — MySQL 服务器启动脚本” 中有关这些选项的说明。)示例[mysqld38] mysqld = mysqld-debug ledir = /opt/local/mysql/libexec
-
命令行格式 --no-log
类型 布尔值 默认值 false
将日志信息打印到
stdout
而不是日志文件。默认情况下,输出将发送到日志文件。 -
命令行格式 --password=字符串
类型 字符串 默认值 [无]
调用 mysqladmin 时要使用的 MySQL 帐户的密码。请注意,与其他 MySQL 程序不同,此选项的密码值不是可选的。
-
命令行格式 --silent
类型 布尔值 默认值 false
静默模式;禁用警告。
-
命令行格式 --tcp-ip
类型 布尔值 默认值 false
通过 TCP/IP 端口而不是 Unix 套接字文件连接到每个 MySQL 服务器。(如果缺少套接字文件,则服务器可能仍在运行,但只能通过 TCP/IP 端口访问。)默认情况下,使用 Unix 套接字文件进行连接。此选项会影响
stop
和report
操作。 -
命令行格式 --user=名称
类型 字符串 默认值 root
调用 mysqladmin 时要使用的 MySQL 帐户的用户名。
-
命令行格式 --verbose
类型 布尔值 默认值 false
更加详细。
-
命令行格式 --version
类型 布尔值 默认值 false
显示版本信息并退出。
有关 mysqld_multi 的一些注意事项
最重要的一点:在使用 mysqld_multi 之前,请确保您了解传递给 mysqld 服务器的选项的含义,以及 为什么 您需要单独的 mysqld 进程。请注意使用具有相同数据目录的多个 mysqld 服务器的危险。使用单独的数据目录,除非您 知道 自己在做什么。在多线程系统中,启动具有相同数据目录的多个服务器 不会 提高性能。请参阅 第 7.8 节“在一台机器上运行多个 MySQL 实例”。
重要确保每个服务器的数据目录对于启动特定 mysqld 进程的 Unix 帐户完全可访问。 不要 为此使用 Unix
root
帐户,除非您 知道 自己在做什么。请参阅 第 8.1.5 节“如何以普通用户身份运行 MySQL”。确保用于停止 mysqld 服务器(使用 mysqladmin 程序)的 MySQL 帐户对于每个服务器都具有相同的用户名和密码。此外,请确保该帐户具有
SHUTDOWN
权限。如果您要管理的服务器的管理帐户具有不同的用户名或密码,则可能需要在每个服务器上创建一个具有相同用户名和密码的帐户。例如,您可以通过为每个服务器执行以下命令来设置一个通用的multi_admin
帐户$> mysql -u root -S /tmp/mysql.sock -p Enter password: mysql> CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'multipass'; mysql> GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
请参阅 第 8.2 节“访问控制和帐户管理”。您必须为每个 mysqld 服务器执行此操作。连接到每个服务器时,请适当地更改连接参数。请注意,帐户名称的主机名部分必须允许您从要运行 mysqld_multi 的主机以
multi_admin
身份连接。每个 mysqld 的 Unix 套接字文件和 TCP/IP 端口号必须不同。(或者,如果主机有多个网络地址,则可以设置
bind_address
系统变量,以使不同的服务器监听不同的接口。)如果您正在使用 mysqld_safe 启动 mysqld(例如,
--mysqld=mysqld_safe
),则--pid-file
选项非常重要。每个 mysqld 都应该有自己的进程 ID 文件。使用 mysqld_safe 而不是 mysqld 的优点是 mysqld_safe 会监视其 mysqld 进程,并在该进程由于使用kill -9
发送的信号或其他原因(例如段错误)而终止时重新启动它。您可能希望对 mysqld 使用
--user
选项,但要做到这一点,您需要以 Unix 超级用户(root
)身份运行 mysqld_multi 脚本。在选项文件中使用该选项并不重要;如果您不是超级用户,并且 mysqld 进程是在您自己的 Unix 帐户下启动的,则只会收到警告。
以下示例显示了如何设置用于 mysqld_multi 的选项文件。 mysqld 程序的启动或停止顺序取决于它们在选项文件中出现的顺序。组号不需要形成不间断的序列。示例中有意省略了第一个和第五个 [mysqld
组,以说明您可以在选项文件中留有 “间隔”。这为您提供了更大的灵活性。N
]
# This is an example of a my.cnf file for mysqld_multi.
# Usually this file is located in home dir ~/.my.cnf or /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = my_password
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/data2/hostname.pid2
datadir = /usr/local/mysql/data2
language = /usr/local/mysql/share/mysql/english
user = unix_user1
[mysqld3]
mysqld = /path/to/mysqld_safe
ledir = /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/data3/hostname.pid3
datadir = /usr/local/mysql/data3
language = /usr/local/mysql/share/mysql/swedish
user = unix_user2
[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/data4/hostname.pid4
datadir = /usr/local/mysql/data4
language = /usr/local/mysql/share/mysql/estonia
user = unix_user3
[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/data6/hostname.pid6
datadir = /usr/local/mysql/data6
language = /usr/local/mysql/share/mysql/japanese
user = unix_user4
请参阅 第 6.2.2.2 节“使用选项文件”。