mysqld_multi旨在管理多个监听不同 Unix 套接字文件和 TCP/IP 端口的 mysqld 进程。它可以启动或停止服务器,或者报告当前状态。
对于某些 Linux 平台,MySQL 安装从 RPM 或 Debian 软件包包括 systemd 支持,以管理 MySQL 服务器启动和关闭。在这些平台上,mysqld_multi 不会安装,因为它是不必要的。有关使用 systemd 管理多个 MySQL 实例的信息,请参阅 第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”。
mysqld_multi 在 my.cnf
文件中搜索名为 [mysqld
的组(或在 N
]--defaults-file
选项指定的文件中)。 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
,不读取任何选项文件。Command-Line Format --no-defaults
Type 布尔值 Default Value false
-
使用
--defaults-file=
, 只读取指定的文件。文件名
Command-Line Format --defaults-file=filename
Type 文件名 Default Value [none]
-
否则,读取标准位置的选项文件,包括由
--defaults-extra-file=
选项指定的文件,如果提供了该选项。(如果该选项被多次指定,最后一个值将被使用。)文件名
Command-Line Format --defaults-extra-file=filename
Type 文件名 Default Value [none]
有关这些和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“命令行选项影响选项文件处理”。
读取的选项文件将搜索 [mysqld_multi]
和 [mysqld
选项组。 N
][mysqld_multi]
组可以用于 mysqld_multi 自身的选项。 [mysqld
组可以用于特定 mysqld 实例的选项。N
]
[mysqld]
或 [mysqld_safe]
组可以用于所有 mysqld 或 mysqld_safe 实例的公共选项。您可以指定一个 --defaults-file=
选项来使用该实例的不同配置文件,在这种情况下,该实例将使用该文件中的 文件名
[mysqld]
或 [mysqld_safe]
组。
mysqld_multi 支持以下选项。
-
Command-Line Format --help
Type 布尔值 Default Value false
显示帮助信息并退出。
-
Command-Line Format --example
Type 布尔值 Default Value false
显示示例选项文件。
-
Command-Line Format --log=路径
Type 文件名 Default Value /var/log/mysqld_multi.log
指定日志文件的名称。如果文件存在,日志输出将追加到该文件中。
-
Command-Line Format --mysqladmin=file
Type 文件名 Default Value [none]
用于停止服务器的 mysqladmin 二进制文件。
-
Command-Line Format --mysqld=file
Type 文件名 Default Value [none]
使用的 mysqld 二进制文件。注意,您可以将 mysqld_safe 作为该选项的值。 如果您使用 mysqld_safe 启动服务器,可以在相应的
[mysqld
选项组中包含N
]mysqld
或ledir
选项。这些选项指示服务器的名称和服务器所在目录的路径名。(见 第 6.3.2 节,“mysqld_safe — MySQL 服务器启动脚本” 中的描述。)示例:[mysqld38] mysqld = mysqld-debug ledir = /opt/local/mysql/libexec
-
Command-Line Format --no-log
Type 布尔值 Default Value false
将日志信息打印到
stdout
而不是日志文件中。默认情况下,输出将写入日志文件。 -
Command-Line Format --password=string
Type 字符串 Default Value [none]
在调用 mysqladmin 时使用的 MySQL 帐户密码。注意,对于这个选项,密码值不是可选的,而是必需的。
-
Command-Line Format --silent
Type 布尔值 Default Value false
静默模式;禁用警告。
-
Command-Line Format --tcp-ip
Type 布尔值 Default Value false
通过 TCP/IP 端口连接到每个 MySQL 服务器,而不是 Unix 套接字文件。(如果套接字文件丢失,服务器可能仍在运行,但只能通过 TCP/IP 端口访问。)默认情况下,连接使用 Unix 套接字文件。这个选项影响
stop
和report
操作。 -
Command-Line Format --user=name
Type 字符串 Default Value root
在调用 mysqladmin 时使用的 MySQL 帐户用户名。
-
Command-Line Format --verbose
Type 布尔值 Default Value false
变得更加详细。
-
Command-Line Format --version
Type 布尔值 Default Value false
显示版本信息并退出。
关于 mysqld_multi 的一些注意事项:
-
最重要的: 在使用 mysqld_multi 之前,请确保您理解传递给 mysqld 服务器的选项的含义,以及为什么您想要拥有单独的 mysqld 进程。小心使用多个 mysqld 服务器具有相同的数据目录的危险。除非您知道自己在做什么,否则请使用单独的数据目录。使用相同的数据目录启动多个服务器不会在线程系统中提供额外的性能。见 第 7.8 节,“在一台机器上运行多个 MySQL 实例”。
Important确保每个服务器的数据目录对应的 Unix 帐户是完全可访问的,用于启动特定的 mysqld 进程。 不要 使用 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
或 segmentation fault 等原因。 -
您可能想使用
--user
选项来mysqld, 但要这样做,您需要以 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