Mysqld multi

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

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参数指定的任何文件(如果有多个相同参数,则使用最后一个值)。


被读取的选项文件在[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应启动的服务器的名称和服务器所在目录的路径名。示例:

[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服务器的危险性。除非您知道自己在做什么,否则请使用单独的数据目录。在线程系统中,使用相同数据目录启动多个服务器并不会提供额外的性能。
重要的是:

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


  • 确保用于通过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';

您必须为每个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]组,以说明选项文件中可以存在“间隔”。这样可以提供更大的灵活性。

# 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