4.3.2 mysqld_safe-MySQL 服务器启动脚本

推荐使用mysqld_safe在 Unix 上启动mysqld服务器。 mysqld_safe添加了一些安全功能,例如在发生错误时重新启动服务器以及将运行时信息记录到错误日志中。错误记录的描述在本节后面给出。

Note

对于某些 Linux 平台,从 RPM 或 Debian 软件包安装的 MySQL 包括对 ManagementMySQL 服务器启动和关闭的系统支持。在这些平台上,未安装mysqld_safe,因为它是不必要的。有关更多信息,请参见第 2.5.10 节“使用 systemdManagementMySQL 服务器”

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

mysqld_safe的许多选项与mysqld的选项相同。参见第 5.1.6 节“服务器命令选项”

如果在命令行中指定了mysqld_safe未知的选项,则会将它们传递给mysqld;如果在选项文件的[mysqld_safe]组中指定了这些参数,则会将它们忽略。参见第 4.2.2.2 节“使用选项文件”

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

[mysqld]
log-error=error.log

为了向后兼容,mysqld_safe也会读取[safe_mysqld]部分,但为最新,您应将此类部分重命名为[mysqld_safe]

mysqld_safe接受命令行和选项文件中的选项,如下 table 所述。有关 MySQL 程序使用的选项文件的信息,请参见第 4.2.2.2 节“使用选项文件”

table4.5 mysqld_safe 选项

Option NameDescriptionIntroducedDeprecated
--basedirMySQL 安装目录的路径
--core-file-sizemysqld 应该能够创建的核心文件的大小
--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-limitmysqld 应该可以打开的文件数
--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 安装目录的路径。

mysqld应该能够创建的核心文件的大小。选项值传递给 ulimit -c

数据目录的路径。

除了通常的选项文件外,还请阅读此选项文件。如果该文件不存在或无法访问,则服务器将退出并显示错误。 * file_name *如果是相对路径名而不是完整路径名,则相对于当前目录进行解释。如果使用它,它必须是命令行上的第一个选项。

有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”

仅使用给定的选项文件。如果该文件不存在或无法访问,则服务器将退出并显示错误。 * file_name *如果是相对路径名而不是完整路径名,则相对于当前目录进行解释。如果使用它,它必须是命令行上的第一个选项。

有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”

如果mysqld_safe找不到服务器,请使用此选项指示服务器所在目录的路径名。

从 MySQL 5.7.17 开始,此选项仅在命令行上接受,而在选项文件中不接受。在使用 systemd 的平台上,可以在MYSQLD_OPTS的值中指定该值。参见第 2.5.10 节“使用 systemdManagementMySQL 服务器”

将错误日志写入给定文件。参见第 5.4.2 节“错误日志”

此选项控制mysqld_safe生成的日志输出中时间戳的格式。以下列 table 描述了允许的值。对于其他任何值,mysqld_safe都会记录警告并使用UTC格式。

  • UTC , utc

ISO 8601 UTC 格式(与服务器的--log_timestamps=UTC相同)。这是默认值。

  • SYSTEM , system

ISO 8601 本地时间格式(与服务器的--log_timestamps=SYSTEM相同)。

  • HYPHEN , hyphen
  • YY-MM-DD h:mm:ss *格式,与 MySQL 5.6 的mysqld_safe相同。

    • LEGACY , legacy
  • YYMMDD hh:mm:ss *格式,如 MySQL 5.6 之前的mysqld_safe

这个选项是在 MySQL 5.7.11 中添加的。

用于内存分配的库的名称,而不是系统malloc()库。从 MySQL 5.7.15 开始,选项值必须是/usr/lib/usr/lib64/usr/lib/i386-linux-gnu/usr/lib/x86_64-linux-gnu目录之一。在 MySQL 5.7.15 之前,可以通过指定其路径名来使用任何库,但是存在一种快捷方式,可以使用 MySQL 5.7 中用于 Linux 的二进制 MySQL 发行版附带的tcmalloc库。在某些配置下,快捷方式 table 单可能无法正常工作,在这种情况下,您应该指定路径名。

Note

从 MySQL 5.7.13 开始,MySQL 发行版不再包含tcmalloc库。

--malloc-lib选项的工作方式是修改LD_PRELOAD环境值以影响动态链接,以使mysqld运行时,加载程序能够找到内存分配库:

  • 如果没有给出选项,或者没有给出值(--malloc-lib=),则不会修改LD_PRELOAD,也不会尝试使用tcmalloc

    • 在 MySQL 5.7.31 之前,如果将选项指定为--malloc-lib=tcmalloc,则mysqld_safe/usr/lib中然后在 MySQL pkglibdir位置(例如/usr/local/mysql/lib或适当的位置)中寻找tcmalloc库。如果找到tmalloc,则其路径名将添加到mysqldLD_PRELOAD值的开头。如果未找到tcmalloc,则mysqld_safe中止并显示错误。

从 MySQL 5.7.31 开始,tcmalloc不是--malloc-lib选项的允许值。

  • 如果将选项指定为--malloc-lib=/path/to/some/library,则将完整路径添加到LD_PRELOAD值的开头。如果完整路径指向不存在或不可读的文件,则mysqld_safe中止并出现错误。

  • 对于mysqld_safeLD_PRELOAD添加路径名的情况,它将路径添加到变量已具有的任何现有值的开头。

Note

在使用 systemdManagement 服务器的系统上,mysqld_safe不可用。而是通过在/etc/sysconfig/mysql中设置LD_PRELOAD来指定分配库。

Linux 用户可以通过将以下行添加到my.cnf文件中来使用二进制软件包中包含的libtcmalloc_minimal.so

[mysqld_safe]
malloc-lib=tcmalloc

这些行也适用于在/usr/lib中安装了tcmalloc软件包的任何平台上的用户。要使用特定的tcmalloc库,请指定其完整路径名。例:

[mysqld_safe]
malloc-lib=/opt/lib/libtcmalloc_minimal.so

您要启动的服务器程序的名称(在ledir目录中)。如果使用 MySQL 二进制分发版,但数据目录不在二进制分发版中,则需要此选项。如果mysqld_safe找不到服务器,请使用--ledir选项指示服务器所在目录的路径名。

从 MySQL 5.7.15 开始,此选项仅在命令行上接受,而在选项文件中不接受。在使用 systemd 的平台上,可以在MYSQLD_OPTS的值中指定该值。参见第 2.5.10 节“使用 systemdManagementMySQL 服务器”

该选项类似于--mysqld选项,但是您仅指定服务器程序名称的后缀。基本名称假定为mysqld。例如,如果使用--mysqld-version=debug,则mysqld_safe将启动ledir目录中的mysqld-debug程序。如果--mysqld-version的参数为空,则mysqld_safe使用ledir目录中的mysqld

从 MySQL 5.7.15 开始,此选项仅在命令行上接受,而在选项文件中不接受。在使用 systemd 的平台上,可以在MYSQLD_OPTS的值中指定该值。参见第 2.5.10 节“使用 systemdManagementMySQL 服务器”

使用nice程序将服务器的调度优先级设置为给定值。

不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,则可以使用--no-defaults来防止读取它们。如果使用它,它必须是命令行上的第一个选项。

有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”

mysqld应该能够打开的文件数。选项值传递给 ulimit -n

Note

您必须以mysqld_safe作为root开头才能正常运行。

mysqld应为其进程 ID 文件使用的路径名。

从 MySQL 5.7.2 到 5.7.17,mysqld_safe有其自己的进程 ID 文件,该文件始终命名为mysqld_safe.pid,位于 MySQL 数据目录中。

插件目录的路径名。

服务器在侦听 TCP/IP 连接时应使用的端口号。除非服务器由rootos 用户启动,否则端口号必须为 1024 或更高。

不要尝试在启动时杀死杂散的mysqld进程。此选项仅在 Linux 上有效。

服务器在侦听本地连接时应使用的 Unix 套接字文件。

--syslog会将错误消息发送到支持 logger 程序的系统上的syslog--skip-syslog禁止使用syslog;消息被写入错误日志文件。

如果将syslog用于错误日志记录,则将daemon.err设施/严重性用于所有日志消息。

从 MySQL 5.7.5 开始,不建议使用这些选项来控制mysqld日志记录。请使用服务器log_syslog系统变量。要控制设施,请使用服务器log_syslog_facility系统变量。参见第 5.4.2.3 节“错误记录到系统日志”

为了记录到syslog,分别使用mysqld_safemysqld的标识符写入来自mysqld_safemysqld的消息。要为标识符指定后缀,请使用--syslog-tag=tag,该标识符将标识符修改为mysqld_safe-tagmysqld-tag

从 MySQL 5.7.5 开始,不建议使用此选项来控制mysqld日志记录。请使用服务器log_syslog_tag系统变量。参见第 5.4.2.3 节“错误记录到系统日志”

TZ时区环境变量设置为给定的选项值。请查阅 os 文档,以获取合法的时区规范格式。

以具有名称* user_name *或数字用户 ID * user_id *的用户身份运行mysqld服务器。 (在此上下文中,“用户”是指系统登录帐户,而不是授权 table 中列出的 MySQL 用户.)

如果使用--defaults-file--defaults-extra-file选项执行mysqld_safe来命名选项文件,则该选项必须是命令行上给出的第一个选项,否则将不使用该选项文件。例如,此命令将不使用命名的选项文件:

mysql> mysqld_safe --port=port_num --defaults-file=file_name

而是使用以下命令:

mysql> mysqld_safe --defaults-file=file_name --port=port_num

编写mysqld_safe脚本是为了使它通常可以启动从 MySQL 的源代码或二进制发行版安装的服务器,即使这些类型的发行版通常将服务器安装在稍微不同的位置。 (请参阅第 2.1.4 节“安装布局”。)mysqld_safe期望满足以下条件之一:

  • 可以相对于工作目录(从中调用mysqld_safe的目录)找到服务器和数据库。对于二进制发行版,mysqld_safe在其工作目录下查找bindata目录。对于源发行版,它将查找libexecvar目录。如果您从 MySQL 安装目录执行mysqld_safe(例如,对于二进制分发为/usr/local/mysql),则应满足此条件。

  • 如果找不到相对于工作目录的服务器和数据库,则mysqld_safe尝试通过绝对路径名找到它们。典型位置是/usr/local/libexec/usr/local/var。实际位置由构建时在发行版中配置的值确定。如果将 MySQL 安装在配置时指定的位置,则它们应该是正确的。

因为mysqld_safe试图查找相对于其自己的工作目录的服务器和数据库,所以只要从 MySQL 安装目录运行mysqld_safe,就可以在任何地方安装 MySQL 的二进制发行版:

shell> cd mysql_installation_directory
shell> bin/mysqld_safe &

如果mysqld_safe失败,即使从 MySQL 安装目录中调用,也要指定--ledir--datadir选项,以指示系统上服务器和数据库所在的目录。

mysqld_safe尝试使用 sleepdate 系统 Util 来确定每秒尝试启动多少次。如果存在这些 Util,并且每秒尝试启动的次数大于 5,则mysqld_safeawait1 整秒,然后再次启动。这样做是为了防止重复出现故障时过度使用 CPU。 (缺陷#11761530,错误#54035)

当您使用mysqld_safe来启动mysqld时,mysqld_safe会安排来自其自身的错误(和通知)消息,以及来自mysqld的错误消息,以转到相同的目的地。

有多个mysqld_safe选项可控制这些消息的目的地:

  • --log-error=file_name:将错误消息写入命名的错误文件。

  • --syslog:在支持 logger 程序的系统上将错误消息写入syslog

  • --skip-syslog:请勿将错误消息写入syslog。消息将写入默认错误日志文件(数据目录中为host_name.err),或者如果指定了--log-error选项,则将消息写入命名文件。

如果没有给出这些选项,则默认值为--skip-syslog

mysqld_safe编写消息时,通知会转到记录目标(syslog或错误日志文件)和stdout。错误到达记录目标和stderr

Note

从 MySQL 5.7.5 开始,不赞成从mysqld_safe控制mysqld日志记录。请改用服务器的本机syslog支持。有关更多信息,请参见第 5.4.2.3 节“错误记录到系统日志”