Mysqld multi - 管理多个mysql服务器

来自泡泡学习笔记
跳到导航 跳到搜索

mysqld_multi 用于管理监听不同 Unix 套接字文件和 TCP/IP 端口的多个 mysqld 进程。它可以启动或停止服务器,或报告它们的当前状态。

注意

对于某些 Linux 平台,通过 RPM 或 Debian 包安装的 MySQL 包括对管理 MySQL 服务器启动和关闭的支持的 systemd。在这些平台上,mysqld_multi 没有安装,因为它是不必要的。


mysqld_multi 在 my.cnf(或由 –defaults-file 选项指定的文件)中搜索名为 [mysqldN] 的组。N 可以是任何正整数。以下讨论中的该数字称为选项组号,或 GNR。组号区分选项组,并用作 mysqld_multi 的参数,以指定要启动、停止或获取状态报告的服务器。这些组中列出的选项与用于启动 mysqld 的 [mysqld] 组中使用的选项相同。但是,在使用多个服务器时,每个服务器必须为其选项(如 Unix 套接字文件和 TCP/IP 端口号)使用自己的值。


要调用 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 会按照以下方式搜索选项文件:

  1. 使用 –no-defaults,不会读取任何选项文件。
  2. 使用 –defaults-file=file_name,只读取指定的文件。
  3. 否则,会读取标准位置列表中的选项文件,包括通过 –defaults-extra-file=file_name 选项给出的任何文件(如果多次给出,则使用最后一个值)。


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


[mysqld] 或 [mysqld_safe] 组可用于所有 mysqld 或 mysqld_safe 实例读取的通用选项。您可以使用 –defaults-file=file_name 选项为该实例使用不同的配置文件,在这种情况下,来自该文件的 [mysqld] 或 [mysqld_safe] 组将用于该实例。


mysqld_multi 支持以下选项。

选项 描述
–help 显示帮助消息并退出。
–example 显示示例选项文件。
–log=file_name 指定日志文件的名称。如果文件存在,日志输出将追加到其中。
–mysqladmin=prog_name 要使用的 mysqladmin 二进制文件。
–mysqld=prog_name 要使用的 mysqld 二进制文件。请注意,您还可以将 mysqld_safe 作为此选项的值指定。如果您使用 mysqld_safe 启动服务器,您可以在相应的 [mysqldN] 选项组中包含 mysqld 或 ledir 选项。这些选项指示 mysqld_safe 应启动的服务器名称以及服务器所在的目录路径名。
–no-log 将日志信息打印到标准输出而不是日志文件。默认情况下,输出将发送到日志文件。
–password=password 调用 mysqladmin 时使用的 MySQL 帐户的密码。请注意,对于此选项,密码值不是可选的,与其他 MySQL 程序不同。
–silent 静默模式;禁用警告。
–tcp-ip 通过 TCP/IP 端口而不是 Unix 套接字文件连接到每个 MySQL 服务器。(如果缺少套接字文件,服务器可能仍可运行,但只能通过 TCP/IP 端口访问。)默认情况下,使用 Unix 套接字文件进行连接。此选项影响停止和报告操作。
–user=user_name 调用 mysqladmin 时使用的 MySQL 帐户的用户名称。
–verbose 更详细。
–version 显示版本信息并退出。


关于 mysqld_multi 的一些注意事项:

最重要:在使用 mysqld_multi 之前,请确保您了解传递给 mysqld 服务器的选项的含义以及为什么您希望有单独的 mysqld 进程。注意使用具有相同数据目录的多个 mysqld 服务器的危险。使用单独的数据目录,除非您知道自己在做什么。在线程系统中使用多个服务器启动不会为您提供额外的性能。


重要

确保每个服务器的数据目录完全对特定 mysqld 进程启动的 Unix 帐户可访问。不要使用 Unix 根帐户进行此操作,除非您知道您在做什么。


确保用于停止 mysqld 服务器(使用 mysqladmin 程序)的 MySQL 帐户对于每个服务器具有相同的用户名和密码。此外,确保帐户具有 SHUTDOWN 权限。如果您想要管理的不同管理员帐户具有不同的用户名或密码,您可能需要在每个服务器上创建一个具有相同用户名和密码的帐户。例如,您可以为每个服务器设置一个名为 multi_admin 的通用 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';

您必须为每个 mysqld 服务器执行此操作。更改连接参数以适应每个连接。请注意,帐户名称的部分主机名部分必须允许您从要运行 mysqld_multi 的主机连接为 multi_admin。


每个 mysqld 必须具有自己的进程 ID 文件。使用 mysqld_safe 而不是 mysqld 的优势是 mysqld_safe 监视其 mysqld 进程并在由于使用 kill -9 或其他原因(如段错误)终止的信号而终止时重新启动它。


您可能想使用 mysqld 的 –user 选项,但要这样做,您需要以 Unix 超级用户(root)身份运行 mysqld_multi 脚本。在选项文件中拥有该选项无关紧要;如果您不是超级用户并且您的 Unix 帐户下启动了您的 mysqld 进程,您将收到警告。


以下示例显示了如何设置用于与 mysqld_multi 一起使用的选项文件。mysqld 程序按选项文件中出现的顺序启动或停止,组编号不必形成不连续的序列。本示例故意省略了前五个 [mysqldN] 组,以便说明您可以在选项文件中有“间隙”。这给了您更多的灵活性。

# 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