“MySQL:服务器和服务器启动程序”的版本间差异

来自Wikioe
跳到导航 跳到搜索
无编辑摘要
 
(未显示同一用户的5个中间版本)
第1行: 第1行:
[[category:MySQL]]
[[category:MySQL]]


== 服务器和服务器启动程序 ==
== PS:关于服务器命令选项 ==
=== mysqld:MySQL服务器 ===
 
 
MySQL的服务器或服务器脚本读取配置文件内容时:
# mysqld从“[mysqld]”、“[server]”组中读取选项。
# mysqld_safe从“[mysqld]”、“[server]”、“[mysqld_safe]”和“[safe_mysqld]”组中读取选项。
# mysql.server从“[mysqld]”和“[mysql.server]”组中读取选项。
# 嵌入式 MySQL 服务器通常从“[server]”、“[embedded]”和“[xxxxx_SERVER]”组中读取选项,其中“xxxxx”是服务器所嵌入的应用程序的名称。
 
 
MySQL 服务器支持的命令实在太多,需要时候去手册查看吧。
# mysqld接受许多命令选项。作为简短摘要,请执行以下命令:
#: <syntaxhighlight lang="xml">
mysqld --help
</syntaxhighlight>
# 要查看完整列表,请使用以下命令:
#: <syntaxhighlight lang="xml">
mysqld --verbose --help
</syntaxhighlight>
 
 
== mysqld:MySQL服务器 ==
<pre>
<pre>
mysqld 也称为 MySQL Server,是一个单线程程序,它不会产生其他进程。它可在 MySQL 安装中完成大部分工作。
mysqld 也称为 MySQL Server,是一个单线程程序,它不会产生其他进程。它可在 MySQL 安装中完成大部分工作。
第22行: 第42行:
* MySQL Server 还具有一组状态变量,这些变量提供有关其操作的信息。您可以监视这些状态变量以访问运行时性能 Feature。
* MySQL Server 还具有一组状态变量,这些变量提供有关其操作的信息。您可以监视这些状态变量以访问运行时性能 Feature。


=== mysqld_safe:MySQL服务器启动脚本 ===
== mysqld_safe:MySQL服务器启动脚本 ==
<p>
<pre>
mysqld_safe 添加了一些安全功能,例如在发生错误时重新启动服务器以及将运行时信息记录到错误日志中。
 
推荐使用mysqld_safe在 Unix 上启动mysqld服务器。
</pre>
* 对于某些 Linux 平台,从 RPM 或 Debian 软件包安装的 MySQL 包括对 ManagementMySQL 服务器启动和关闭的系统支持。在这些平台上,未安装mysqld_safe,因为它是不必要的。
 
 
mysqld_safe尝试启动名为'''mysqld'''的可执行文件。要覆盖默认行为并明确指定要运行的服务器的名称,请为mysqld_safe指定“'''--mysqld'''”或“'''--mysqld-version'''”选项。也可以使用“'''--ledir'''”指示mysqld_safe在其中寻找服务器的目录。


</p>


mysqld_safe从选项文件(配置文件“my.ini”)的'''[mysqld]''','''[server]'''和'''[mysqld_safe]'''节中读取所有选项。例如,如果您指定这样的[mysqld]部分,则mysqld_safe将找到并使用--log-error选项:
<syntaxhighlight lang="xml">
[mysqld]
log-error=error.log
</syntaxhighlight>


=== mysql.server:MySQL服务器启动脚本 ===
* mysqld_safe的许多选项与mysqld的选项相同。
<p>
* 如果在命令行中指定了mysqld_safe未知的选项,则会将它们传递给mysqld;如果在选项文件的'''[mysqld_safe]'''组中指定了这些参数,则会将它们忽略。
* 为了向后兼容,mysqld_safe也会读取[safe_mysqld]部分,但为最新,您应将此类部分重命名为[mysqld_safe]。


</p>


mysqld_safe 接受命令行和选项文件中的选项,如下:
{| class="wikitable"
! Option Name !! Description !! Introduced !! Deprecated
|-
| --basedir || MySQL 安装目录的路径 ||  ||
|-
| --core-file-size || mysqld 应该能够创建的核心文件的大小 ||  ||
|-
| --datadir || 数据目录的路径 ||  ||
|-
| --defaults-extra-file || 除常规选项文件外,还读取命名的选项文件 ||  ||
|-
| --defaults-file || 只读命名的选项文件 ||  ||
|-
| --help || 显示帮助信息并退出 ||  ||
|-
| --ledir || 服务器所在目录的路径 ||  ||
|-
| --log-error || 将错误日志写入命名文件 ||  ||
|-
| --malloc-lib || 用于 mysqld 的备用 malloc 库 ||  ||
|-
| --mysqld || 要启动的服务器程序的名称(在 ledir 目录中) ||  ||
|-
| --mysqld-safe-log-timestamps || 日志记录的时间戳格式 || 5.7.11 ||
|-
| --mysqld-version || 服务器程序名称的后缀 ||  ||
|-
| --nice || 使用漂亮的程序设置服务器调度优先级 ||  ||
|-
| --no-defaults || 不读取选项文件 ||  ||
|-
| --open-files-limit || mysqld 应该可以打开的文件数 ||  ||
|-
| --pid-file || 服务器进程标识文件的路径名 ||  ||
|-
| --plugin-dir || 安装插件的目录 ||  ||
|-
| --port || 侦听 TCP/IP 连接的端口号 ||  ||
|-
| --skip-kill-mysqld || 不要试图杀死流离失所的 mysqld 进程 ||  ||
|-
| --skip-syslog || 不要将错误消息写入 syslog;使用错误日志文件 ||  || Yes
|-
| --socket || 侦听 Unix 套接字连接的套接字文件 ||  ||
|-
| --syslog || 将错误消息写入系统日志 ||  || Yes
|-
| --syslog-tag || 标记后缀,用于写入系统日志的消息 ||  || Yes
|-
| --timezone || 将 TZ 时区环境变量设置为命名值 ||  ||
|-
| --user || 以具有名称 user_name 或数字用户 ID user_id 的用户身份运行 mysqld ||  ||
|}


=== mysqld_multi:管理多个MySQL服务器 ===
== mysql.server:MySQL服务器启动脚本 ==
<p>
<pre>
Unix 和类似 Unix 的系统上的 MySQL 发行版包含一个名为mysql.server的脚本,该脚本使用mysqld_safe启动 MySQL 服务器。


</p>
它可以在使用 System V 样式的运行目录来启动和停止系统服务的系统(例如 Linux 和 Solaris)上使用。


== Client端程序 ==
适用于 MySQL 的 macOS 启动项也使用它。
</pre>
* 对于某些 Linux 平台,从 RPM 或 Debian 软件包安装的 MySQL 包括对 ManagementMySQL 服务器启动和关闭的系统支持。在这些平台上,未安装mysql.server和mysqld_safe,因为它们是不必要的。
 
 
mysql.server 是在 MySQL 源代码树中使用的脚本名称。安装的名称可能不同(例如mysqld或mysql)。在下面的讨论中,根据您的系统调整名称mysql.server。
 
mysql.server将位置更改为 MySQL 安装目录,然后调用mysqld_safe。要以某些特定用户身份运行服务器,请将适当的user选项添加到全局'''/etc/my.cnf'''选项文件的'''[mysqld]'''组中。(如果在非标准位置安装了 MySQL 的二进制发行版,则可能必须编辑mysql.server。修改它以在运行mysqld_safe之前将位置更改为正确的目录。如果执行此操作,则mysql.server的修改后的版本可能需要在以后升级 MySQL 时被覆盖;请复制您可以重新安装的编辑版本。)
 
 
要使用mysql.server脚本手动启动或停止服务器,请从命令行使用start或stop参数调用它:
<syntaxhighlight lang="xml">
shell> mysql.server start
shell> mysql.server stop
</syntaxhighlight>
* “mysql.server stop”通过向服务器发送 signal 来停止服务器。您也可以通过执行“mysqladmin shutdown”手动停止服务器。
* 要在服务器上自动启动和停止 MySQL,必须在'''/etc/rc*'''文件中的适当位置添加启动和停止命令:
*# 如果您使用 Linux 服务器 RPM 软件包(“MySQL-server-VERSION.rpm”)或本地 Linux 软件包安装,则mysql.server脚本可能以'''mysqld'''或'''mysql'''的名称安装在'''/etc/init.d'''目录中。
*# 如果从源代码发行版安装 MySQL 或使用不会自动安装mysql.server的二进制发行版格式,则可以手动安装脚本。可以在 MySQL 安装目录下的'''support-files'''目录中或 MySQL 源代码树中找到它。将脚本复制到名称为mysql的'''/etc/init.d'''目录并使其可执行:
*#: <syntaxhighlight lang="xml">
shell> cp mysql.server /etc/init.d/mysql
shell> chmod +x /etc/init.d/mysql
</syntaxhighlight>
 
 
安装脚本后,激活脚本以在系统启动时运行所需的命令取决于您的 os:
# 在 Linux 上,您可以使用'''chkconfig''':
#: <syntaxhighlight lang="xml">
shell> chkconfig --add mysql
</syntaxhighlight>
# 在某些 Linux 系统上,似乎也需要以下命令来完全启用mysql脚本:
#: <syntaxhighlight lang="xml">
shell> chkconfig --level 345 mysql on
</syntaxhighlight>
# 在 FreeBSD 上,启动脚本通常应放在'''/usr/local/etc/rc.d/'''中。将mysql.server脚本安装为'''/usr/local/etc/rc.d/mysql.server.sh'''以启用自动启动。rc(8)手册页指出,仅当其基本名称与'''*.sh''' shell 文件名模式匹配时,才会执行此目录中的脚本。目录中存在的任何其他文件或目录都将被静默忽略。
# 作为上述设置的替代方法,某些 os 还使用'''/etc/rc.local'''或'''/etc/init.d/boot.local'''在启动时启动其他服务。要使用此方法启动 MySQL,请将以下命令添加到适当的启动文件中:
#: <syntaxhighlight lang="xml">
/bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'
</syntaxhighlight>
# 对于其他系统,请查阅 os 说明文件以了解如何安装启动脚本。
 
 
mysql.server从选项文件的'''[mysql.server]'''和'''[mysqld]'''部分中读取选项。
* 为了向后兼容,它还会读取[mysql_server]部分,但为最新,您应将此类部分重命名为[mysql.server]。
可以在全局'''/etc/my.cnf'''文件中为mysql.server添加选项。典型的my.cnf文件可能如下所示:
<syntaxhighlight lang="xml">
[mysqld]
datadir=/usr/local/mysql/var
socket=/var/tmp/mysql.sock
port=3306
user=mysql
 
[mysql.server]
basedir=/usr/local/mysql
</syntaxhighlight>
 
 
mysql.server脚本支持下 table 中显示的选项:
* (如果指定,则必须将它们放置在选项文件中,而不是在命令行中。mysql.server仅支持start和stop作为命令行参数)
{| class="wikitable"
! Option Name !! Description !! Type
|-
| basedir || MySQL 安装目录的路径 || Directory name
|-
| datadir || MySQL 数据目录的路径 || Directory name
|-
| pid-file || 服务器应在其中写入其进程 ID 的文件 || File name
|-
| service-startup-timeout || await 服务器启动的时间 || Integer
|}
 
== mysqld_multi:管理多个MySQL服务器 ==
<pre>
mysqld_multi 用于 Management 多个mysqld进程,这些进程侦听不同 Unix 套接字文件和 TCP/IP 端口上的连接。它可以启动或停止服务器,或报告其当前状态。
</pre>
* 对于某些 Linux 平台,从 RPM 或 Debian 软件包安装的 MySQL 包括对 ManagementMySQL 服务器启动和关闭的系统支持。在这些平台上,未安装mysqld_multi,因为它是不必要的。
 
 
要调用mysqld_multi,请使用以下语法:
<syntaxhighlight lang="xml">
shell> mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]
</syntaxhighlight>
其中:
# mysqld_multi 在'''my.cnf'''(或“'''--defaults-file'''”选项命名的文件)中搜索名为'''[mysqldN]'''的组。“N”可以是任何正整数。此编号称为选项组编号,或“'''GNR'''”。组号将选项组彼此区分开,并用作mysqld_multi的参数,以指定要启动,停止或获取其状态报告的服务器。
# start,stop,reload 和 report 指示要执行的操作
#: 您可以对单个服务器或多个服务器执行指定的操作(具体取决于GNR)。如果指定具体 GNR,则mysqld_multi对选项文件中的所有服务器执行操作。
# 每个 GNR 值表示一个选项组号或组号范围,该值应该是选项文件中组名末尾的数字。
#: 例如,名为“[mysqld17]”的组的 GNR 是17。
## 要指定数字范围,请用破折号分隔第一个和最后一个数字。如 GNR 值 10-13 表示组 [mysqld10] 至 [mysqld13]。
## 可以在命令行上指定多个组或组范围,以逗号分隔。GNR 内容中不得包含空格字符(空格或制表符),空格字符后的所有内容都将被忽略。
示例:此命令使用选项组[mysqld8]和[mysqld10]至[mysqld13]停止多个服务器:
<syntaxhighlight lang="xml">
shell> mysqld_multi stop 8,10-13
</syntaxhighlight>
 
 
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支持以下 options:
{| class="wikitable"
! Option Name !! Description
|-
| --help || 显示帮助消息并退出。
|-
| --example || 显示 samples 选项文件。
|-
| --log=file_name || 指定日志文件的名称。如果文件存在,则将日志输出附加到该文件。
|-
| --mysqladmin=prog_name || mysqladmin二进制文件用于停止服务器。
|-
| --mysqld=prog_name
| 要使用的mysqld二进制文件。请注意,您也可以指定mysqld_safe作为此选项的值。如果使用mysqld_safe启动服务器,则可以在相应的[mysqldN]选项组中包含mysqld或ledir选项。这些选项指示mysqld_safe应该启动的服务器的名称以及该服务器所在目录的路径名称。示例:
<syntaxhighlight lang="xml">
[mysqld38]
mysqld = mysqld-debug
ledir  = /opt/local/mysql/libexec
</syntaxhighlight>
|-
| --no-log || 将日志信息打印到stdout而不是日志文件。默认情况下,输出进入日志文件。
|-
| --password=password || 调用mysqladmin时要使用的 MySQL 帐户的密码。请注意,与其他 MySQL 程序不同,此选项的密码值不是可选的。
|-
| --silent || 静音模式;禁用警告。
|-
| --tcp-ip || 通过 TCP/IP 端口而不是 Unix 套接字文件连接到每个 MySQL 服务器。 (如果缺少套接字文件,则服务器可能仍在运行,但只能通过 TCP/IP 端口访问.)默认情况下,使用 Unix 套接字文件进行连接。此选项影响stop和report操作。
|-
| --user=user_name || 调用mysqladmin时要使用的 MySQL 帐户的用户名。
|-
| --verbose || 更多信息。
|-
| --version || 显示版本信息并退出。
|}
 
 
 
关于mysqld_multi的注意事项:
* <big>在使用mysqld_multi之前,请确保您了解传递给mysqld服务器的选项的含义,以及为什么希望有单独的mysqld进程。注意使用具有相同数据目录的多个mysqld服务器的危险。除非您“知道”正在做什么,否则请使用单独的数据目录。另外:使用同一数据目录启动多个服务器并不会在线程系统中提供额外的性能。</big>
* 确保用于停止mysqld服务器(与mysqladmin程序一起使用)的 MySQL 帐户具有与每个服务器相同的用户名和密码。另外,请确保该帐户具有SHUTDOWN特权。如果要 Management 的服务器的 Management 帐户使用不同的用户名或密码,则可能要在每台具有相同用户名和密码的服务器上创建一个帐户。例如,您可以通过为每个服务器执行以下命令来设置通用的multi_admin帐户:
*: <syntaxhighlight lang="xml">
shell> 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';
</syntaxhighlight>
* 每个mysqld的 Unix 套接字文件和 TCP/IP 端口号都必须不同。(或者,如果主机具有多个网络地址,则可以设置 bind_address 系统变量以使不同的服务器侦听不同的接口。)
* 如果使用 mysqld_safe 来启动 mysqld(例如“--mysqld=mysqld_safe”),则“--pid-file”选项非常重要。每个mysqld应该都有自己的进程 ID 文件。使用mysqld_safe而不是mysqld的优点是mysqld_safe监视其mysqld进程,如果该进程由于使用kill -9发送的 signal 或由于其他原因(例如分段错误)而终止,则重新启动它。
* 您可能希望对mysqld使用“--user”选项,但是要执行此操作,您需要以 Unix 超级用户(root)身份运行mysqld_multi脚本。在选项文件中包含选项无关紧要;如果您不是超级用户,并且您使用自己的 Unix 帐户启动mysqld进程,则会收到警告。
 
 
mysqld_multi 的配置文件示例:
<syntaxhighlight lang="xml">
# 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
</syntaxhighlight>

2021年3月23日 (二) 22:39的最新版本


PS:关于服务器命令选项

MySQL的服务器或服务器脚本读取配置文件内容时:

  1. mysqld从“[mysqld]”、“[server]”组中读取选项。
  2. mysqld_safe从“[mysqld]”、“[server]”、“[mysqld_safe]”和“[safe_mysqld]”组中读取选项。
  3. mysql.server从“[mysqld]”和“[mysql.server]”组中读取选项。
  4. 嵌入式 MySQL 服务器通常从“[server]”、“[embedded]”和“[xxxxx_SERVER]”组中读取选项,其中“xxxxx”是服务器所嵌入的应用程序的名称。


MySQL 服务器支持的命令实在太多,需要时候去手册查看吧。

  1. mysqld接受许多命令选项。作为简短摘要,请执行以下命令:
    mysqld --help
    
  2. 要查看完整列表,请使用以下命令:
    mysqld --verbose --help
    


mysqld:MySQL服务器

mysqld 也称为 MySQL Server,是一个单线程程序,它不会产生其他进程。它可在 MySQL 安装中完成大部分工作。

MySQL 服务器 Management 对【包含数据库和 table 的】MySQL 数据目录的访问。数据目录也是其他信息(例如日志文件和状态文件)的默认位置。
  • 某些安装软件包包含名为“mysqld-debug”的服务器的调试版本。调用此版本而不是mysqld以获得调试支持、内存分配检查和跟踪文件支持。


MySQL 服务器启动时,它将侦听来自 Client 端程序的网络连接,并代 table 这些 Client 端 Management 对数据库的访问。

mysqld程序具有许多可以在启动时指定的选项。有关选项的完整列 table,请运行以下命令:

shell> mysqld --verbose --help


  • MySQL Server 还具有一组系统变量,这些变量会在运行时影响其操作。可以在服务器启动时设置系统变量,并且可以在运行时更改许多系统变量以实现动态服务器重新配置。
  • MySQL Server 还具有一组状态变量,这些变量提供有关其操作的信息。您可以监视这些状态变量以访问运行时性能 Feature。

mysqld_safe:MySQL服务器启动脚本

mysqld_safe 添加了一些安全功能,例如在发生错误时重新启动服务器以及将运行时信息记录到错误日志中。

推荐使用mysqld_safe在 Unix 上启动mysqld服务器。 
  • 对于某些 Linux 平台,从 RPM 或 Debian 软件包安装的 MySQL 包括对 ManagementMySQL 服务器启动和关闭的系统支持。在这些平台上,未安装mysqld_safe,因为它是不必要的。


mysqld_safe尝试启动名为mysqld的可执行文件。要覆盖默认行为并明确指定要运行的服务器的名称,请为mysqld_safe指定“--mysqld”或“--mysqld-version”选项。也可以使用“--ledir”指示mysqld_safe在其中寻找服务器的目录。


mysqld_safe从选项文件(配置文件“my.ini”)的[mysqld][server][mysqld_safe]节中读取所有选项。例如,如果您指定这样的[mysqld]部分,则mysqld_safe将找到并使用--log-error选项:

[mysqld]
log-error=error.log
  • mysqld_safe的许多选项与mysqld的选项相同。
  • 如果在命令行中指定了mysqld_safe未知的选项,则会将它们传递给mysqld;如果在选项文件的[mysqld_safe]组中指定了这些参数,则会将它们忽略。
  • 为了向后兼容,mysqld_safe也会读取[safe_mysqld]部分,但为最新,您应将此类部分重命名为[mysqld_safe]。


mysqld_safe 接受命令行和选项文件中的选项,如下:

Option Name Description Introduced Deprecated
--basedir MySQL 安装目录的路径
--core-file-size mysqld 应该能够创建的核心文件的大小
--datadir 数据目录的路径
--defaults-extra-file 除常规选项文件外,还读取命名的选项文件
--defaults-file 只读命名的选项文件
--help 显示帮助信息并退出
--ledir 服务器所在目录的路径
--log-error 将错误日志写入命名文件
--malloc-lib 用于 mysqld 的备用 malloc 库
--mysqld 要启动的服务器程序的名称(在 ledir 目录中)
--mysqld-safe-log-timestamps 日志记录的时间戳格式 5.7.11
--mysqld-version 服务器程序名称的后缀
--nice 使用漂亮的程序设置服务器调度优先级
--no-defaults 不读取选项文件
--open-files-limit mysqld 应该可以打开的文件数
--pid-file 服务器进程标识文件的路径名
--plugin-dir 安装插件的目录
--port 侦听 TCP/IP 连接的端口号
--skip-kill-mysqld 不要试图杀死流离失所的 mysqld 进程
--skip-syslog 不要将错误消息写入 syslog;使用错误日志文件 Yes
--socket 侦听 Unix 套接字连接的套接字文件
--syslog 将错误消息写入系统日志 Yes
--syslog-tag 标记后缀,用于写入系统日志的消息 Yes
--timezone 将 TZ 时区环境变量设置为命名值
--user 以具有名称 user_name 或数字用户 ID user_id 的用户身份运行 mysqld

mysql.server:MySQL服务器启动脚本

Unix 和类似 Unix 的系统上的 MySQL 发行版包含一个名为mysql.server的脚本,该脚本使用mysqld_safe启动 MySQL 服务器。

它可以在使用 System V 样式的运行目录来启动和停止系统服务的系统(例如 Linux 和 Solaris)上使用。

适用于 MySQL 的 macOS 启动项也使用它。
  • 对于某些 Linux 平台,从 RPM 或 Debian 软件包安装的 MySQL 包括对 ManagementMySQL 服务器启动和关闭的系统支持。在这些平台上,未安装mysql.server和mysqld_safe,因为它们是不必要的。


mysql.server 是在 MySQL 源代码树中使用的脚本名称。安装的名称可能不同(例如mysqld或mysql)。在下面的讨论中,根据您的系统调整名称mysql.server。

mysql.server将位置更改为 MySQL 安装目录,然后调用mysqld_safe。要以某些特定用户身份运行服务器,请将适当的user选项添加到全局/etc/my.cnf选项文件的[mysqld]组中。(如果在非标准位置安装了 MySQL 的二进制发行版,则可能必须编辑mysql.server。修改它以在运行mysqld_safe之前将位置更改为正确的目录。如果执行此操作,则mysql.server的修改后的版本可能需要在以后升级 MySQL 时被覆盖;请复制您可以重新安装的编辑版本。)


要使用mysql.server脚本手动启动或停止服务器,请从命令行使用start或stop参数调用它:

shell> mysql.server start
shell> mysql.server stop
  • “mysql.server stop”通过向服务器发送 signal 来停止服务器。您也可以通过执行“mysqladmin shutdown”手动停止服务器。
  • 要在服务器上自动启动和停止 MySQL,必须在/etc/rc*文件中的适当位置添加启动和停止命令:
    1. 如果您使用 Linux 服务器 RPM 软件包(“MySQL-server-VERSION.rpm”)或本地 Linux 软件包安装,则mysql.server脚本可能以mysqldmysql的名称安装在/etc/init.d目录中。
    2. 如果从源代码发行版安装 MySQL 或使用不会自动安装mysql.server的二进制发行版格式,则可以手动安装脚本。可以在 MySQL 安装目录下的support-files目录中或 MySQL 源代码树中找到它。将脚本复制到名称为mysql的/etc/init.d目录并使其可执行:
      shell> cp mysql.server /etc/init.d/mysql
      shell> chmod +x /etc/init.d/mysql
      


安装脚本后,激活脚本以在系统启动时运行所需的命令取决于您的 os:

  1. 在 Linux 上,您可以使用chkconfig
    shell> chkconfig --add mysql
    
  2. 在某些 Linux 系统上,似乎也需要以下命令来完全启用mysql脚本:
    shell> chkconfig --level 345 mysql on
    
  3. 在 FreeBSD 上,启动脚本通常应放在/usr/local/etc/rc.d/中。将mysql.server脚本安装为/usr/local/etc/rc.d/mysql.server.sh以启用自动启动。rc(8)手册页指出,仅当其基本名称与*.sh shell 文件名模式匹配时,才会执行此目录中的脚本。目录中存在的任何其他文件或目录都将被静默忽略。
  4. 作为上述设置的替代方法,某些 os 还使用/etc/rc.local/etc/init.d/boot.local在启动时启动其他服务。要使用此方法启动 MySQL,请将以下命令添加到适当的启动文件中:
    /bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'
    
  5. 对于其他系统,请查阅 os 说明文件以了解如何安装启动脚本。


mysql.server从选项文件的[mysql.server][mysqld]部分中读取选项。

  • 为了向后兼容,它还会读取[mysql_server]部分,但为最新,您应将此类部分重命名为[mysql.server]。

可以在全局/etc/my.cnf文件中为mysql.server添加选项。典型的my.cnf文件可能如下所示:

[mysqld]
datadir=/usr/local/mysql/var
socket=/var/tmp/mysql.sock
port=3306
user=mysql

[mysql.server]
basedir=/usr/local/mysql


mysql.server脚本支持下 table 中显示的选项:

  • (如果指定,则必须将它们放置在选项文件中,而不是在命令行中。mysql.server仅支持start和stop作为命令行参数)
Option Name Description Type
basedir MySQL 安装目录的路径 Directory name
datadir MySQL 数据目录的路径 Directory name
pid-file 服务器应在其中写入其进程 ID 的文件 File name
service-startup-timeout await 服务器启动的时间 Integer

mysqld_multi:管理多个MySQL服务器

mysqld_multi 用于 Management 多个mysqld进程,这些进程侦听不同 Unix 套接字文件和 TCP/IP 端口上的连接。它可以启动或停止服务器,或报告其当前状态。
  • 对于某些 Linux 平台,从 RPM 或 Debian 软件包安装的 MySQL 包括对 ManagementMySQL 服务器启动和关闭的系统支持。在这些平台上,未安装mysqld_multi,因为它是不必要的。


要调用mysqld_multi,请使用以下语法:

shell> mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]

其中:

  1. mysqld_multi 在my.cnf(或“--defaults-file”选项命名的文件)中搜索名为[mysqldN]的组。“N”可以是任何正整数。此编号称为选项组编号,或“GNR”。组号将选项组彼此区分开,并用作mysqld_multi的参数,以指定要启动,停止或获取其状态报告的服务器。
  2. start,stop,reload 和 report 指示要执行的操作
    您可以对单个服务器或多个服务器执行指定的操作(具体取决于GNR)。如果指定具体 GNR,则mysqld_multi对选项文件中的所有服务器执行操作。
  3. 每个 GNR 值表示一个选项组号或组号范围,该值应该是选项文件中组名末尾的数字。
    例如,名为“[mysqld17]”的组的 GNR 是17。
    1. 要指定数字范围,请用破折号分隔第一个和最后一个数字。如 GNR 值 10-13 表示组 [mysqld10] 至 [mysqld13]。
    2. 可以在命令行上指定多个组或组范围,以逗号分隔。GNR 内容中不得包含空格字符(空格或制表符),空格字符后的所有内容都将被忽略。

示例:此命令使用选项组[mysqld8]和[mysqld10]至[mysqld13]停止多个服务器:

shell> mysqld_multi stop 8,10-13


mysqld_multi 读取配置文件时:

  1. 使用“--no-defaults”时,不会读取任何配置文件。
  2. 使用“--defaults-file=file_name”,仅读取命名的文件。
  3. 否则,将读取标准位置列表中的选项文件,包括由“--defaults-extra-file=file_name”选项命名的任何文件。(如果多次给出该选项,则使用最后一个值)

在读取的选项文件中搜索[mysqld_multi][mysqldN]选项组:

  1. [mysqld_multi] 组可用于mysqld_multi本身的选项。
  2. [mysqldN] 组可用于传递给特定mysqld实例的选项。
  3. [mysqld] 或 [mysqld_safe] 组可用于mysqld或mysqld_safe的所有实例读取的公用选项。您可以指定“--defaults-file=file_name”选项为该实例使用其他配置文件,在这种情况下,该文件中的[mysqld]或[mysqld_safe]组将用于该实例。


mysqld_multi支持以下 options:

Option Name Description
--help 显示帮助消息并退出。
--example 显示 samples 选项文件。
--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 将日志信息打印到stdout而不是日志文件。默认情况下,输出进入日志文件。
--password=password 调用mysqladmin时要使用的 MySQL 帐户的密码。请注意,与其他 MySQL 程序不同,此选项的密码值不是可选的。
--silent 静音模式;禁用警告。
--tcp-ip 通过 TCP/IP 端口而不是 Unix 套接字文件连接到每个 MySQL 服务器。 (如果缺少套接字文件,则服务器可能仍在运行,但只能通过 TCP/IP 端口访问.)默认情况下,使用 Unix 套接字文件进行连接。此选项影响stop和report操作。
--user=user_name 调用mysqladmin时要使用的 MySQL 帐户的用户名。
--verbose 更多信息。
--version 显示版本信息并退出。


关于mysqld_multi的注意事项:

  • 在使用mysqld_multi之前,请确保您了解传递给mysqld服务器的选项的含义,以及为什么希望有单独的mysqld进程。注意使用具有相同数据目录的多个mysqld服务器的危险。除非您“知道”正在做什么,否则请使用单独的数据目录。另外:使用同一数据目录启动多个服务器并不会在线程系统中提供额外的性能。
  • 确保用于停止mysqld服务器(与mysqladmin程序一起使用)的 MySQL 帐户具有与每个服务器相同的用户名和密码。另外,请确保该帐户具有SHUTDOWN特权。如果要 Management 的服务器的 Management 帐户使用不同的用户名或密码,则可能要在每台具有相同用户名和密码的服务器上创建一个帐户。例如,您可以通过为每个服务器执行以下命令来设置通用的multi_admin帐户:
    shell> 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的 Unix 套接字文件和 TCP/IP 端口号都必须不同。(或者,如果主机具有多个网络地址,则可以设置 bind_address 系统变量以使不同的服务器侦听不同的接口。)
  • 如果使用 mysqld_safe 来启动 mysqld(例如“--mysqld=mysqld_safe”),则“--pid-file”选项非常重要。每个mysqld应该都有自己的进程 ID 文件。使用mysqld_safe而不是mysqld的优点是mysqld_safe监视其mysqld进程,如果该进程由于使用kill -9发送的 signal 或由于其他原因(例如分段错误)而终止,则重新启动它。
  • 您可能希望对mysqld使用“--user”选项,但是要执行此操作,您需要以 Unix 超级用户(root)身份运行mysqld_multi脚本。在选项文件中包含选项无关紧要;如果您不是超级用户,并且您使用自己的 Unix 帐户启动mysqld进程,则会收到警告。


mysqld_multi 的配置文件示例:

# 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