### 4.3.4 mysqld_multi — 管理多个 MySQL 服务器

[](<>)[](<>)[](<>)[](<>)

[**mysqld\_多**](mysqld-multi.html)旨在管理几个[**mysqld**](mysqld.html)侦听不同 Unix 套接字文件和 TCP/IP 端口上的连接的进程。它可以启动或停止服务器，或报告它们的当前状态。

笔记

对于某些 Linux 平台，从 RPM 或 Debian 软件包安装 MySQL 包括用于管理 MySQL 服务器启动和关闭的 systemd 支持。在这些平台上，[**mysqld\_多**](mysqld-multi.html)没有安装，因为它是不必要的。有关使用 systemd 处理多个 MySQL 实例的信息，请参阅[第 2.5.9 节，“使用 systemd 管理 MySQL 服务器”](using-systemd.html).

[**mysqld\_多**](mysqld-multi.html)搜索名为的组`[mysqld*`ñ`*]`在`我的.cnf`（或在由[`--defaults 文件`](mysqld-multi.html#option_mysqld_multi_defaults-file)选项）。*`ñ`*可以是任何正整数。此编号在以下讨论中称为选项组编号，或*`GNR`*.组号将选项组彼此区分开，并用作参数[**mysqld\_多**](mysqld-multi.html)指定要启动、停止或获取状态报告的服务器。这些组中列出的选项与您在`[mysqld]`用于启动的组[**mysqld**](mysqld.html).（例如，参见[第 2.10.5 节，“自动启动和停止 MySQL”](automatic-start.html).) 然而，当使用多台服务器时，每台服务器都必须使用自己的选项值，例如 Unix 套接字文件和 TCP/IP 端口号。有关在多服务器环境中每个服务器哪些选项必须唯一的详细信息，请参阅[第 5.8 节，“在一台机器上运行多个 MySQL 实例”](multiple-servers.html).

调用[**mysqld\_多**](mysqld-multi.html), 使用以下语法：

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

`开始`,`停止`,`重新加载`（停止并重新启动），以及`报告`指示要执行的操作。您可以对单个服务器或多个服务器执行指定的操作，具体取决于*`GNR`*选项名称后面的列表。如果没有清单，[**mysqld\_多**](mysqld-multi.html)对选项文件中的所有服务器执行操作。

每个*`GNR`*value 表示选项组编号或组编号范围。该值应该是选项文件中组名末尾的数字。例如，*`GNR`*对于一个名为`[mysqld17]`是`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\_多**](mysqld-multi.html)搜索选项文件如下：

-   [](<>)和[`--no-defaults`](mysqld-multi.html#option_mysqld_multi_no-defaults)，不读取选项文件。

    [](<>)[](<>)

-   [](<>)和[`--默认文件=*`文件名`*`](mysqld-multi.html#option_mysqld_multi_defaults-file)，只读取命名文件。

    [](<>)[](<>)

-   [](<>)否则，将读取标准位置列表中的选项文件，包括由[`--defaults-extra-file=*`文件名`*`](mysqld-multi.html#option_mysqld_multi_defaults-extra-file)选项，如果有的话。（如果多次给出该选项，则使用最后一个值。）

     [](<>)[](<>)

    有关这些和其他选项文件选项的更多信息，请参阅[第 4.2.2.3 节，“影响选项文件处理的命令行选项”](option-file-options.html).

    搜索读取的选项文件`[mysqld_multi]`和`[mysqld*`ñ`*]`选项组。这`[mysqld_multi]`组可用于选项[**mysqld\_多**](mysqld-multi.html)本身。`[mysqld*`ñ`*]`组可用于传递给特定的选项[**mysqld**](mysqld.html)实例。

    这`[mysqld]`要么`[mysqld_safe]`组可用于所有实例读取的公共选项[**mysqld**](mysqld.html)要么[**mysqld\_安全的**](mysqld-safe.html).您可以指定一个[`--默认文件=*`文件名`*`](server-options.html#option_mysqld_defaults-file)为该实例使用不同配置文件的选项，在这种情况下`[mysqld]`要么`[mysqld_safe]`该文件中的组用于该实例。

[**mysqld\_多**](mysqld-multi.html)支持以下选项。

-   [](<>) [`- 帮助`](mysqld-multi.html#option_mysqld_multi_help)

    [](<>)[](<>)

    显示帮助信息并退出。

-   [](<>) [`- 例子`](mysqld-multi.html#option_mysqld_multi_example)

    [](<>)[](<>)

    显示示例选项文件。

-   [](<>) [`--log=*`文件名`*`](mysqld-multi.html#option_mysqld_multi_log)

    [](<>)[](<>)

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

-   [](<>) [`--mysqladmin=*`prog_name`*`](mysqld-multi.html#option_mysqld_multi_mysqladmin)

    [](<>)[](<>)

    这[**mysql管理员**](mysqladmin.html)用于停止服务器的二进制文件。

-   [](<>) [`--mysqld=*`prog_name`*`](mysqld-multi.html#option_mysqld_multi_mysqld)

    [](<>)[](<>)

    这[**mysqld**](mysqld.html)要使用的二进制文件。请注意，您可以指定[**mysqld\_安全的**](mysqld-safe.html)也作为此选项的值。如果你使用[**mysqld\_安全的**](mysqld-safe.html)要启动服务器，您可以包括`mysqld`要么`雷迪尔`对应选项中`[mysqld*`ñ`*]`选项组。这些选项指示服务器的名称[**mysqld\_安全的**](mysqld-safe.html)应该开始和服务器所在目录的路径名。（请参阅这些选项的说明[第 4.3.2 节，“mysqld\_安全——MySQL 服务器启动脚本”](mysqld-safe.html)。） 例子：

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

-   [](<>) [`--无日志`](mysqld-multi.html#option_mysqld_multi_no-log)

    [](<>)[](<>)

    打印日志信息到`标准输出`而不是日志文件。默认情况下，输出到日志文件。

-   [](<>) [`--密码=*`密码`*`](mysqld-multi.html#option_mysqld_multi_password)

    [](<>)[](<>)

    调用时要使用的 MySQL 帐户的密码[**mysql管理员**](mysqladmin.html).请注意，与其他 MySQL 程序不同，此选项的密码值不是可选的。

-   [](<>) [`- 无声`](mysqld-multi.html#option_mysqld_multi_silent)

    [](<>)[](<>)

    静音模式;禁用警告。

-   [](<>) [`--tcp-ip`](mysqld-multi.html#option_mysqld_multi_tcp-ip)

    [](<>)[](<>)

    通过 TCP/IP 端口而不是 Unix 套接字文件连接到每个 MySQL 服务器。（如果缺少套接字文件，服务器可能仍在运行，但只能通过 TCP/IP 端口访问。）默认情况下，使用 Unix 套接字文件进行连接。此选项影响`停止`和`报告`操作。

-   [](<>) [`--用户=*`用户名`*`](mysqld-multi.html#option_mysqld_multi_user)

    [](<>)[](<>)

    调用时要使用的 MySQL 帐户的用户名[**mysql管理员**](mysqladmin.html).

-   [](<>) [`--详细`](mysqld-multi.html#option_mysqld_multi_verbose)

    [](<>)[](<>)

    更冗长。

-   [](<>) [`- 版本`](mysqld-multi.html#option_mysqld_multi_version)

     [](<>)[](<>)

    显示版本信息并退出。

    关于的一些注意事项[**mysqld\_多**](mysqld-multi.html)：

-   **最重要的**: 使用前[**mysqld\_多**](mysqld-multi.html)确保您理解传递给[**mysqld**](mysqld.html)服务器和*为什么*你会想要分开[**mysqld**](mysqld.html)过程。谨防使用多个[**mysqld**](mysqld.html)具有相同数据目录的服务器。使用单独的数据目录，除非您*知道*你在做什么。使用相同的数据目录启动多个服务器*不是*在线程系统中为您提供额外的性能。看[第 5.8 节，“在一台机器上运行多个 MySQL 实例”](multiple-servers.html).

    重要的

    确保每个服务器的数据目录对于特定的 Unix 帐户是完全可访问的[**mysqld**](mysqld.html)进程启动为。*不要*使用 Unix*`根`*考虑到这一点，除非你*知道*你在做什么。看[第 6.1.5 节，“如何以普通用户身份运行 MySQL”](changing-mysql-user.html).

-   确保用于停止的 MySQL 帐户[**mysqld**](mysqld.html)服务器（与[**mysql管理员**](mysqladmin.html)程序）对于每个服务器具有相同的用户名和密码。另外，请确保该帐户具有[`关掉`](privileges-provided.html#priv_shutdown)特权。如果您要管理的服务器的管理帐户具有不同的用户名或密码，您可能希望在每台服务器上创建一个具有相同用户名和密码的帐户。例如，您可以设置一个公共`多管理员`通过为每个服务器执行以下命令来创建帐户：

    ```
    $> 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 节，“访问控制和帐户管理”](access-control.html).你必须为每个[**mysqld**](mysqld.html)服务器。连接每个参数时，适当更改连接参数。请注意，帐户名的主机名部分必须允许您以`多管理员`从您要运行的主机[**mysqld\_多**](mysqld-multi.html).

-   Unix 套接字文件和 TCP/IP 端口号必须不同[**mysqld**](mysqld.html).（或者，如果主机有多个网络地址，您可以设置[`绑定地址`](server-system-variables.html#sysvar_bind_address)系统变量导致不同的服务器监听不同的接口。）

-   这[`--pid 文件`](mysqld-safe.html#option_mysqld_safe_pid-file)如果您正在使用，选项非常重要[**mysqld\_安全的**](mysqld-safe.html)开始[**mysqld**](mysqld.html)（例如，[`--mysqld=mysqld_safe`](mysqld-safe.html#option_mysqld_safe_mysqld)） 每一个[**mysqld**](mysqld.html)应该有自己的进程 ID 文件。使用的好处[**mysqld\_安全的**](mysqld-safe.html)代替[**mysqld**](mysqld.html)就是它[**mysqld\_安全的**](mysqld-safe.html)监控其[**mysqld**](mysqld.html)进程并在进程因使用发送的信号而终止时重新启动它`杀死 -9`或其他原因，例如分段错误。

-   您可能想使用[`- 用户`](server-options.html#option_mysqld_user)选项[**mysqld**](mysqld.html)，但要做到这一点，你需要运行[**mysqld\_多**](mysqld-multi.html)脚本作为 Unix 超级用户 (`根`）。在选项文件中有选项无关紧要；如果您不是超级用户并且[**mysqld**](mysqld.html)进程在您自己的 Unix 帐户下启动。

    以下示例显示了如何设置选项文件以用于[**mysqld\_多**](mysqld-multi.html).的顺序[**mysqld**](mysqld.html)程序的启动或停止取决于它们在选项文件中出现的顺序。组号不需要形成一个完整的序列。第一和第五`[mysqld*`ñ`*]`示例中有意省略了组，以说明您可以在选项文件中存在“间隙”。这为您提供了更大的灵活性。


```
# 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
```

看[第 4.2.2.2 节，“使用选项文件”](option-files.html).
