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 会按照以下方式搜索选项文件:
- 使用 –no-defaults,不会读取任何选项文件。
- 使用 –defaults-file=file_name,只读取指定的文件。
- 否则,会读取标准位置列表中的选项文件,包括通过 –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