6.3.4 mysqld_多实例 — 管理多个 MySQL 服务器
mysqld_多实例 是一种工具,用于管理多个 mysqld 进程,它们监听不同的 Unix 套接字文件和 TCP/IP 端口。它可以启动或停止服务器,或者报告它们的当前状态。
对于一些 Linux 平台,MySQL 的 RPM 或 Debian 包装包括了 systemd 支持,以便管理 MySQL 服务器的启动和关闭。在这些平台上,mysqld_多实例 不被安装,因为它是多余的。有关使用 systemd 管理多个 MySQL 实例的信息,请参阅 第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”。
mysqld_多实例 会在 my.cnf
(或者由 --defaults-file
选项指定的文件) 中搜索以 [mysqldN]
命名的组。N
可以是任何正整数。在接下来的讨论中,这个数字被称为选项组号,或者 GNR
。组号区分不同的选项组,并用于指定您想要启动、停止或获取状态报告的服务器。这些组中的选项与用于启动 mysqld 的 [mysqld]
组中的选项相同。例如,请参阅 第 2.9.5 节,“MySQL 的自动启动和停止”。然而,在使用多个服务器时,每个服务器必须使用自己的值来设置如 Unix 套接字文件和 TCP/IP 端口号的选项。在多服务器环境中哪些选项必须是每个服务器唯一的,请参阅 第 7.8 节,“在一台机器上运行多个 MySQL 实例”。
要调用 mysqld_多实例,请使用以下语法:
mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]
start
, stop
, reload
(停止并重启) 和 report
指定要执行的操作。您可以根据在选项文件中跟随该选项名称的 GNR
列表来对单个服务器或多个服务器执行指定的操作。如果没有列表,mysqld_多实例 对选项文件中所有服务器执行操作。
每个 GNR
值代表一个选项组号或一系列组号。这个值应该是选项文件中的组名末尾数字。在 mysqld_多实例 命令行中指定的 GNR
值之间不能有空格字符(空格或制表符);任何空格后的内容都会被忽略。
这个命令启动一个单独的服务器,使用选项组 [mysqld17]
:
mysqld_multi start 17
这个命令停止几个服务器,使用选项组 [mysqld8]
和 [mysqld10]
到 [mysqld13]
:
mysqld_multi stop 8,10-13
要设置一个示例的选项文件,请使用这个命令:
mysqld_multi --example
mysqld_多实例 根据以下方式搜索选项文件:
-
如果没有
--no-defaults
,则不读取任何选项文件。Command-Line Format --no-defaults
Type 布尔值 Default Value false
-
使用
--defaults-file=
选项,只读取指定的文件。file_name
Command-Line Format --defaults-file=filename
Type 文件名 Default Value [none]
-
否则,会读取标准位置的选项文件,包括由
--defaults-extra-file=
选项指定的任何文件。如果该选项被多次给出,最后一个值将被使用。file_name
Command-Line Format --defaults-extra-file=filename
Type 文件名 Default Value [none]
有关这些和其他影响选项文件处理的命令行选项的更多信息,请参阅 第6.2.2.3节,“Command-Line Options that Affect Option-File Handling”。
读取的选项文件中搜索 [mysqld_multi]
和 [mysqld
选项组。 N
][mysqld_multi]
组可以用于为 mysqld_multi 本身提供的选项。 [mysqld
组可以用于为特定的 mysqld 实例提供选项。N
]
[mysqld]
或 [mysqld_safe]
组可以用于为所有 mysqld 或 mysqld_safe 实例提供的常用选项。您可以使用 --defaults-file=
选项来为该实例使用不同的配置文件,那么该实例的 file_name
[mysqld]
或 [mysqld_safe]
组将用于该实例。
mysqld_multi 支持以下选项。
-
Command-Line Format --help
Type 布尔值 Default Value false
显示帮助消息并退出。
-
Command-Line Format --example
Type 布尔值 Default Value false
显示一个样本选项文件。
-
Command-Line Format --log=filename
Type 文件名 Default Value /var/log/mysqld_multi.log
指定日志文件的名称。如果文件存在,日志输出将附加到该文件中。
-
Command-Line Format --mysqladmin=file
Type 文件名 Default Value [none]
用于停止服务器的 mysqladmin 二进制文件。
-
Command-Line Format --mysqld=file
Type 文件名 Default Value [none]
要使用的MySQL服务器二进制文件是mysqld。请注意,您还可以将mysqld_safe指定为此选项的值。使用mysqld_safe启动服务器时,您可以在相应的[mysqld
N
]选项组中包括mysqld或ledir选项。这些选项指示mysqld_safe应该启动哪个服务器以及服务器位于的目录路径。请参阅第6.3.2节,“mysqld_safe — MySQL Server Startup Script”中的这些选项的描述。示例:[mysqld38] mysqld = mysqld-debug ledir = /opt/local/mysql/libexec
-
Command-Line Format --no-log
Type 布尔值 Default Value false
将日志信息打印到stdout而不是日志文件中。默认情况下,输出会写入日志文件。
-
Command-Line Format --password=string
Type 字符串 Default Value [none]
当调用mysqladmin时要使用的MySQL账户密码。请注意,对于其他MySQL程序而言,这个选项的密码值是可选的,但对于mysqladmin,它是必需的。
-
Command-Line Format --silent
Type 布尔值 Default Value false
静默模式;禁用警告。
-
Command-Line Format --tcp-ip
Type 布尔值 Default Value false
通过TCP/IP端口连接到每个MySQL服务器,而不是使用Unix套接字文件。默认情况下,连接会使用Unix套接字文件。这一选项影响stop和report操作。
-
Command-Line Format --user=name
Type 字符串 Default Value root
当调用mysqladmin时要使用的MySQL账户用户名。
-
Command-Line Format --verbose
Type 布尔值 Default Value false
详细模式;更详细的输出。
-
Command-Line Format --version
Type 布尔值 Default Value false
显示版本信息并退出。
关于mysqld_multi的一些注意事项:
-
最重要: 在使用mysqld_多服务器之前,确保您理解传递给mysqld服务器的选项含义,以及为什么要有单独的mysqld进程。注意使用多个mysqld服务器共享相同数据目录的风险。除非您知道自己在做什么,否则不要使用相同数据目录的多个mysqld服务器。请参阅第 7.8 节,“在一台机器上运行多个 MySQL 实例”。
Important确保每个服务器的数据目录对启动相应mysqld进程的 Unix 账户是完全可访问的。不要使用 Unix
root
账户,除非您知道自己在做什么。请参阅第 8.1.5 节,“如何以普通用户身份运行 MySQL”。 -
确保用于停止mysqld服务器的 MySQL 账户(使用mysqladmin程序)在每个服务器上都有相同的用户名和密码。此外,该账户必须具有
SHUTDOWN
权限。如果您想要管理的服务器使用不同的用户名或密码来管理其帐户,您可能需要为每个服务器创建一个具有相同用户名和密码的通用账户。例如,您可以通过在每个服务器上执行以下命令来设置一个名为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';
请参阅第 8.2 节,“访问控制和帐户管理”。您需要为每个mysqld服务器执行此操作。在连接到每一台服务器时,请相应地更改连接参数。请注意,帐户名称中的主机部分必须允许您以
multi_admin
身份从要运行mysqld_多服务器的主机连接。 -
Unix 套接字文件和 TCP/IP 端口号码必须为每个mysqld不同。或者,如果主机有多个网络地址,您可以设置
bind_地址
系统变量,以便不同的服务器监听不同的接口。 -
如果您使用mysqld_安全来启动mysqld(例如,使用
--mysqld=mysqld_安全
),--pid-文件
选项非常重要。每个mysqld都应该有自己的进程 ID 文件。使用mysqld_安全而不是mysqld的优势在于mysqld_安全会监控其mysqld进程,并在收到使用kill -9
信号或其他原因(如段错误)时重启该进程。 -
您可能想要使用
--user
选项来启动mysqld,但要做到这一点,您需要以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