Mysqld multi

来自泡泡学习笔记
BrainBs讨论 | 贡献2023年7月4日 (二) 13:45的版本
跳到导航 跳到搜索

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


'使用注意点:'

  1. 一般情况下不要为多MySql服务器配置相同的数据目录。
  2. 确保用于多MySql服务器的MySql停止服务账号的账号和密码一致。
  3. 每个MySql服务器的套接字与端口必须不一致。
  4. 使用独立的进程文件对于安全启动MySql服务器很重要。


注意:
对于某些Linux平台,通过RPM或Debian软件包安装MySQL时已经包含了systemd支持,用于管理MySQL服务器的启动和关闭。在这些平台上,不需要安装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参数指定的任何文件(如果有多个相同参数,则使用最后一个值)。

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

被读取的选项文件在[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应启动的服务器的名称和服务器所在目录的路径名。 (请参阅第4.3.2节“mysqld_safe —— MySQL服务器启动脚本”中有关这些选项的描述。)示例:

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

将日志信息打印到标准输出而不是日志文件中。默认情况下,输出会写入日志文件。

--password=password

在调用mysqladmin时使用的MySQL账户的密码。与其他MySQL程序不同,此选项的密码值是必需的。

--silent

静默模式;禁用警告。

--tcp-ip

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

--user=user_name

在调用mysqladmin时使用的MySQL账户的用户名。

--verbose

增加详细输出。

--version

显示版本信息并退出。


关于mysqld_multi的一些注意事项:

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

重要的是:

确保每个服务器的数据目录对特定的mysqld进程所使用的Unix帐户完全可访问。除非您知道自己在做什么,否则不要使用Unix root帐户进行此操作。请参阅6.1.5节“如何将MySQL作为普通用户运行”。

确保用于通过mysqladmin程序停止mysqld服务器的MySQL帐户对于每个服务器具有相同的用户名和密码。还要确保该帐户具有SHUTDOWN权限。如果要管理的服务器的管理帐户具有不同的用户名或密码,您可能需要在每个服务器上创建一个具有相同用户名和密码的帐户。例如,您可以通过执行以下命令来设置一个常见的multi_admin帐户:

$> mysql -u root -S /tmp/mysql.sock -p 输入密码: mysql> CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'multipass'; mysql> GRANT SHUTDOWN ON . TO 'multi_admin'@'localhost'; 请参阅6.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发送的信号或其他原因(如段错误)终止时重新启动该进程。

您可能想要为mysqld使用--user选项,但是为此您需要以Unix超级用户(root)身份运行mysqld_multi脚本。选项文件中是否存在该选项并不重要;如果您不是超级用户并且mysqld进程在您自己的Unix帐户下启动,则只会收到警告。

以下示例显示了如何为mysqld_multi设置选项文件。mysqld程序的启动或停止顺序取决于它们在选项文件中出现的顺序。组编号不需要形成连续的序列。在示例中有意省略了第一个和第五个[mysqldN]组,以说明选项文件中可以存在“间隔”。这样可以提供更大的灵活性。

  1. This is an example of a my.cnf file for mysqld_multi.
  2. 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