mysqld_multi 用于管理多个 mysqld 进程,这些进程监听不同的 Unix 套接字文件和 TCP/IP 端口上的连接。它可以启动或停止服务器,或报告其当前状态。
对于一些 Linux 平台,从 RPM 或 Debian 包安装的 MySQL 包含系统d支持,用于管理 MySQL 服务器启动和关闭。在这些平台上,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
类型 文件名 默认值 [none]
否则,将读取标准位置列表中的选项文件,包括由
--defaults-extra-file=
选项指定的任何文件(如果提供)。(如果该选项被多次提供,则使用最后一个值。)file_name
命令行格式 --defaults-extra-file=filename
类型 文件名 默认值 [none]
有关这些选项和其他选项文件选项的更多信息,请参阅 第 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=path
类型 文件名 默认值 /var/log/mysqld_multi.log
指定日志文件名称。如果文件存在,日志输出将追加到该文件。
-
命令行格式 --mysqladmin=file
类型 文件名 默认值 [none]
要用于停止服务器的 mysqladmin 二进制文件。
-
命令行格式 --mysqld=file
类型 文件名 默认值 [none]
要使用的 mysqld 二进制文件。请注意,您也可以指定 mysqld_safe 作为此选项的值。如果您使用 mysqld_safe 启动服务器,您可以在相应的
[mysqld
选项组中包含N
]mysqld
或ledir
选项。这些选项指示 mysqld_safe 应启动的服务器名称以及服务器所在目录的路径名。(有关这些选项的说明,请参阅 第 6.3.2 节,“mysqld_safe — MySQL Server Startup Script”。)示例[mysqld38] mysqld = mysqld-debug ledir = /opt/local/mysql/libexec
-
命令行格式 --no-log
类型 布尔值 默认值 false
将日志信息打印到
stdout
而不是日志文件。默认情况下,输出将转到日志文件。 -
命令行格式 --password=string
类型 String 默认值 [none]
调用 mysqladmin 时使用的 MySQL 帐户的密码。请注意,与其他 MySQL 程序不同,此选项的密码值不是可选的。
-
命令行格式 --silent
类型 布尔值 默认值 false
静默模式;禁用警告。
-
命令行格式 --tcp-ip
类型 布尔值 默认值 false
通过 TCP/IP 端口而不是 Unix 套接字文件连接到每个 MySQL 服务器。(如果套接字文件丢失,服务器可能仍在运行,但只能通过 TCP/IP 端口访问。)默认情况下,连接使用 Unix 套接字文件建立。此选项会影响
stop
和report
操作。 -
命令行格式 --user=name
类型 String 默认值 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 节,“使用选项文件”。