4.3.4 mysqld_multi-Management 多个 MySQL 服务器

mysqld_multi用于 Management 多个mysqld进程,这些进程侦听不同 Unix 套接字文件和 TCP/IP 端口上的连接。它可以启动或停止服务器,或报告其当前状态。

Note

对于某些 Linux 平台,从 RPM 或 Debian 软件包安装的 MySQL 包括对 ManagementMySQL 服务器启动和关闭的系统支持。在这些平台上,未安装mysqld_multi,因为它是不必要的。有关使用 systemd 处理多个 MySQL 实例的信息,请参见第 2.5.10 节“使用 systemdManagementMySQL 服务器”

mysqld_multimy.cnf(或--defaults-file选项命名的文件)中搜索名为[mysqldN]的组。 * N 可以是任何正整数。在下面的讨论中,此编号称为选项组编号,或 GNR *。组号将选项组彼此区分开,并用作mysqld_multi的参数,以指定要启动,停止或获取其状态报告的服务器。这些组中列出的选项与在用于启动mysqld[mysqld]组中使用的选项相同。 (例如,请参见第 2.10.5 节“自动启动和停止 MySQL”。)但是,当使用多台服务器时,每个服务器都必须使用自己的值作为选项,例如 Unix 套接字文件和 TCP/IP 端口号。有关在多服务器环境中每个服务器上哪些选项必须唯一的更多信息,请参见第 5.7 节“在一台机器上运行多个 MySQL 实例”

要调用mysqld_multi,请使用以下语法:

shell> mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]

startstopreload(停止并重新启动)和report指示要执行的操作。您可以对单个服务器或多个服务器执行指定的操作,具体取决于选项名称后面的* GNR *列 table。如果没有列 table,则mysqld_multi对选项文件中的所有服务器执行操作。

每个* GNR 值 table 示一个选项组号或组号范围。该值应该是选项文件中组名末尾的数字。例如,名为[mysqld17]的组的 GNR *是17。要指定数字范围,请用破折号分隔第一个和最后一个数字。 * GNR *值10-13table 示组[mysqld10][mysqld13]。可以在命令行上指定多个组或组范围,以逗号分隔。 * GNR *列 table 中不得包含空格字符(空格或制 table 符);空格字符后的所有内容都将被忽略。

此命令使用选项组[mysqld17]启动单个服务器:

shell> mysqld_multi start 17

此命令使用选项组[mysqld8][mysqld10][mysqld13]停止多个服务器:

shell> mysqld_multi stop 8,10-13

有关如何设置选项文件的示例,请使用以下命令:

shell> mysqld_multi --example

mysqld_multi搜索选项文件,如下所示:

  • 否则,将读取标准位置列 table 中的选项文件,包括由--defaults-extra-file=file_name选项命名的任何文件(如果已指定)。 (如果多次给出该选项,则使用最后一个值.)

有关这些选项文件选项和其他选项文件选项的其他信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”

在读取的选项文件中搜索[mysqld_multi][mysqldN]选项组。 [mysqld_multi]组可用于mysqld_multi本身的选项。 [mysqldN]组可用于传递给特定mysqld实例的选项。

[mysqld][mysqld_safe]组可用于mysqldmysqld_safe的所有实例读取的公用选项。您可以指定--defaults-file=file_name选项为该实例使用其他配置文件,在这种情况下,该文件中的[mysqld][mysqld_safe]组将用于该实例。

mysqld_multi支持以下选项。

显示帮助消息并退出。

显示 samples 选项文件。

指定日志文件的名称。如果文件存在,则将日志输出附加到该文件。

mysqladmin二进制文件用于停止服务器。

要使用的mysqld二进制文件。请注意,您也可以指定mysqld_safe作为此选项的值。如果使用mysqld_safe启动服务器,则可以在相应的[mysqldN]选项组中包含mysqldledir选项。这些选项指示mysqld_safe应该启动的服务器的名称以及该服务器所在目录的路径名称。 (请参见第 4.3.2 节“ mysqld_safe-MySQL 服务器启动脚本”中有关这些选项的说明。)示例:

[mysqld38]
mysqld = mysqld-debug
ledir  = /opt/local/mysql/libexec

将日志信息打印到stdout而不是日志文件。默认情况下,输出进入日志文件。

调用mysqladmin时要使用的 MySQL 帐户的密码。请注意,与其他 MySQL 程序不同,此选项的密码值不是可选的。

静音模式;禁用警告。

通过 TCP/IP 端口而不是 Unix 套接字文件连接到每个 MySQL 服务器。 (如果缺少套接字文件,则服务器可能仍在运行,但只能通过 TCP/IP 端口访问.)默认情况下,使用 Unix 套接字文件进行连接。此选项影响stopreport操作。

调用mysqladmin时要使用的 MySQL 帐户的用户名。

更加冗长。

显示版本信息并退出。

关于mysqld_multi的一些注意事项:

  • 最重要 :在使用mysqld_multi之前,请确保您了解传递给mysqld服务器的选项的含义,以及为什么希望有单独的mysqld进程。注意使用具有相同数据目录的多个mysqld服务器的危险。除非您“知道”正在做什么,否则请使用单独的数据目录。使用同一数据目录启动多个服务器并不会在线程系统中提供额外的性能。参见第 5.7 节“在一台机器上运行多个 MySQL 实例”

Important

确保启动特定mysqld进程的 Unix 帐户可以完全访问每个服务器的数据目录。 除非知道您在做什么,否则请不要使用 Unix * root *帐户。参见第 6.1.5 节“如何以普通用户身份运行 MySQL”

  • 确保用于停止mysqld服务器(与mysqladmin程序一起使用)的 MySQL 帐户具有与每个服务器相同的用户名和密码。另外,请确保该帐户具有SHUTDOWN特权。如果要 Management 的服务器的 Management 帐户使用不同的用户名或密码,则可能要在每台具有相同用户名和密码的服务器上创建一个帐户。例如,您可以通过为每个服务器执行以下命令来设置通用的multi_admin帐户:
shell> 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';

参见第 6.2 节“访问控制和帐户 Management”。您必须为每个mysqld服务器执行此操作。连接到每个连接参数时,请适当更改连接参数。请注意,帐户名的主机名部分必须允许您以multi_admin的身份从要运行mysqld_multi的主机进行连接。

  • 每个mysqld的 Unix 套接字文件和 TCP/IP 端口号都必须不同。 (或者,如果主机具有多个网络地址,则可以设置bind_address系统变量以使不同的服务器侦听不同的接口。)

  • 如果您使用mysqld_safe来启动mysqld(例如--mysqld=mysqld_safe),则--pid-file选项非常重要。每个mysqld应该都有自己的进程 ID 文件。使用mysqld_safe而不是mysqld的优点是mysqld_safe监视其mysqld进程,如果该进程由于使用kill -9发送的 signal 或由于其他原因(例如分段错误)而终止,则重新启动它。

  • 您可能希望对mysqld使用--user选项,但是要执行此操作,您需要以 Unix 超级用户(root)身份运行mysqld_multi脚本。在选项文件中包含选项无关紧要;如果您不是超级用户,并且您使用自己的 Unix 帐户启动mysqld进程,则会收到警告。

以下示例显示了如何设置用于mysqld_multi的选项文件。 mysqld程序的启动或停止 Sequences 取决于它们在选项文件中出现的 Sequences。组号不必形成连续的序列。示例中有意省略了第一个和第三个[mysqldN]组,以说明您可以在选项文件中包含“空白”。这为您提供了更大的灵 Active。

# 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

See 第 4.2.2.2 节“使用选项文件”.