Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  mysqld_safe — MySQL Server Startup Script

6.3.2 mysqld_safe — MySQL 服务器启动脚本

mysqld_safe 是在 Unix 上启动 mysqld 服务器的推荐方式。mysqld_safe 添加了一些安全功能,例如在错误发生时重新启动服务器,并将运行时信息记录到错误日志中。该部分稍后将对错误日志记录进行描述。

Note

对于某些 Linux 平台,MySQL 安装从 RPM 或 Debian 软件包包括 systemd 对 MySQL 服务器启动和关闭的支持。在这些平台上,mysqld_safe 不会被安装,因为它是不必要的。有关更多信息,请参阅 第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”

在使用 systemd 管理服务器的平台上,不使用 mysqld_safe 的一个结果是,option 文件中的 [mysqld_safe][safe_mysqld] 部分不受支持,可能会导致意外行为。

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

许多 mysqld_safe 的选项与 mysqld 的选项相同。请参阅 第 7.1.7 节,“服务器命令选项”

未知的 mysqld_safe 选项将被传递给 mysqld,如果它们在命令行上指定,但如果它们在选项文件的 [mysqld_safe] 部分中指定,则将被忽略。请参阅 第 6.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 接受命令行和选项文件中的选项,如下表所示。有关 MySQL 程序使用的选项文件的信息,请参阅 第 6.2.2.2 节,“使用选项文件”

表 6.7 mysqld_safe 选项

Option Name Description
--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 日志记录的时间戳格式
--mysqld-version 服务器程序名称的后缀
--nice 使用 nice 程序设置服务器调度优先级
--no-defaults 不读取任何选项文件
--open-files-limit mysqld 可以打开的文件数
--pid-file 服务器进程 ID 文件的路径名
--plugin-dir 插件安装目录
--port TCP/IP 连接的端口号
--skip-kill-mysqld 不尝试杀死闲置的 mysqld 进程
--skip-syslog 不将错误消息写入 syslog;使用错误日志文件
--socket Unix 套接字连接的套接字文件
--syslog 将错误消息写入 syslog
--syslog-tag syslog 消息的标签后缀
--timezone 设置 TZ 时间区域环境变量的值
--user 以用户名或用户 ID 运行 mysqld

  • --help

    Command-Line Format --help

    显示帮助信息并退出。

  • --basedir=dir_name

    Command-Line Format --basedir=dir_name
    Type 目录名称

    MySQL 安装目录的路径。

  • --core-file-size=size

    Command-Line Format --core-file-size=size
    Type 字符串

    mysqld 可以创建的核心文件的大小。该选项值将传递给 ulimit -c

    Note

    变量 innodb_buffer_pool_in_core_file 可以用于减少核心文件的大小,在支持它的操作系统上。有关更多信息,请参阅 第 17.8.3.7 节,“从核心文件中排除缓冲池页面”

  • --datadir=dir_name

    Command-Line Format --datadir=dir_name
    Type 目录名称

    数据目录的路径。

  • --defaults-extra-file=file_name

    Command-Line Format --defaults-extra-file=file_name
    Type 文件名称

    读取此选项文件,除了通常的选项文件。如果文件不存在或不可访问,服务器将退出并显示错误。如果 file_name 不是绝对路径名,它将相对于当前目录进行解释。这必须是命令行的第一个选项,如果使用了它。

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

  • --defaults-file=file_name

    Command-Line Format --defaults-file=file_name
    Type 文件名称

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

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

  • --ledir=dir_name

    Command-Line Format --ledir=dir_name
    Type 目录名称

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

    此选项仅在命令行上接受,不在选项文件中。 在使用 systemd 的平台上,值可以在 MYSQLD_OPTS 的值中指定。请参阅 第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”

  • --log-error=file_name

    Command-Line Format --log-error=file_name
    Type 文件名称

    将错误日志写入给定的文件。请参阅 第 7.4.2 节,“错误日志”

  • --mysqld-safe-log-timestamps

    Command-Line Format --mysqld-safe-log-timestamps=type
    Type 枚举
    Default Value utc
    Valid Values

    system

    hyphen

    legacy

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

    • UTC, utc

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

    • SYSTEM, system

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

    • HYPHENhyphen

      YY-MM-DD h:mm:ss 格式,如在 mysqld_safe 中用于 MySQL 5.6。

    • LEGACYlegacy

      YYMMDD hh:mm:ss 格式,如在 mysqld_safe 中用于 MySQL 5.6 之前的版本。

  • --malloc-lib=[lib_name]

    Command-Line Format --malloc-lib=[lib-name]
    Type 字符串

    用于指定内存分配库的名称,而不是使用系统的 malloc() 库。选项值必须是以下目录之一:/usr/lib/usr/lib64/usr/lib/i386-linux-gnu/usr/lib/x86_64-linux-gnu

    --malloc-lib 选项通过修改 LD_PRELOAD 环境变量来影响动态链接,以便加载器在 mysqld 运行时找到内存分配库:

    • 如果未指定该选项,或者指定了该选项但没有值(--malloc-lib=),则不会修改 LD_PRELOAD,也不会尝试使用 tcmalloc

    • 在 MySQL 8.0.21 之前,如果指定了该选项为 --malloc-lib=tcmalloc,则 mysqld_safe 将在 /usr/lib 中查找 tcmalloc 库。如果找到该库,其路径名将被添加到 LD_PRELOAD 值的开头。如果未找到该库,mysqld_safe 将以错误终止。

      从 MySQL 8.0.21 开始,tcmalloc 不再是 --malloc-lib 选项的有效值。

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

    • mysqld_safe 添加路径名到 LD_PRELOAD 值时,它将添加该路径到任何现有的值开头。

    Note

    在使用 systemd 管理服务器的系统中,mysqld_safe 不可用。相反,通过在 /etc/sysconfig/mysql 中设置 LD_PRELOAD 来指定分配库。

    Linux 用户可以在任何安装了 tcmalloc 包的平台上使用 libtcmalloc_minimal.so 库,方法是将以下行添加到 my.cnf 文件中:

    [mysqld_safe]
    malloc-lib=tcmalloc

    要使用特定的 tcmalloc 库,指定其完整路径名。例如:

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

    Command-Line Format --mysqld=file_name
    Type 文件名

    服务器程序的名称(在 ledir 目录中)您想要启动的。这选项是必要的,如果您使用 MySQL 二进制分布式但数据目录位于二进制分布式之外。如果 mysqld_safe 无法找到服务器,使用 --ledir 选项来指示服务器所在目录的路径名称。

    该选项仅在命令行上接受,不在选项文件中。 在使用 systemd 的平台上,该值可以在 MYSQLD_OPTS 的值中指定。见 第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”

  • --mysqld-version=suffix

    Command-Line Format --mysqld-version=suffix
    Type 字符串

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

    该选项仅在命令行上接受,不在选项文件中。 在使用 systemd 的平台上,该值可以在 MYSQLD_OPTS 的值中指定。见 第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”

  • --nice=priority

    Command-Line Format --nice=priority
    Type 数字

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

  • --no-defaults

    Command-Line Format --no-defaults
    Type 字符串

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

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

  • --open-files-limit=count

    Command-Line Format --open-files-limit=count
    Type 字符串

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

    Note

    您必须以 root 身份启动 mysqld_safe 才能正确地工作。

  • --pid-file=file_name

    Command-Line Format --pid-file=file_name
    Type 文件名

    mysqld 应该使用的进程 ID 文件的路径名称。

  • --插件目录=目录名

    Command-Line Format --插件目录=目录名
    Type 目录名

    插件目录的路径名。

  • --端口=端口号

    Command-Line Format --端口=数字
    Type 数字

    服务器监听TCP/IP连接的端口号。除非服务器由root操作系统用户启动,否则端口号必须为1024或更高。

  • --跳过杀死mysqld

    Command-Line Format --跳过杀死mysqld

    不要在启动时尝试杀死stray mysqld进程。这只适用于Linux。

  • --socket=路径

    Command-Line Format --socket=文件名
    Type 文件名

    服务器监听本地连接的Unix套接字文件。

  • --syslog, --跳过syslog

    Command-Line Format --syslog
    Deprecated
    Command-Line Format --跳过syslog
    Deprecated

    --syslog 将错误消息发送到支持 logger 程序的系统的 syslog--跳过syslog 取消使用 syslog;消息将被写入错误日志文件。

    syslog 用于错误日志时,使用 daemon.err 设备/严重性记录所有日志消息。

    使用这些选项控制 mysqld 日志记录已弃用。要将错误日志输出写入系统日志,请参阅 第 7.4.2.8 节,“错误日志记录到系统日志”。要控制设施,请使用服务器 log_syslog_facility 系统变量。

  • --syslog-tag=标签

    Command-Line Format --syslog-tag=标签
    Deprecated

    对于 syslog 日志记录,来自 mysqld_safemysqld 的消息将被写入标识符 mysqld_safemysqld。要指定标识符的后缀,请使用 --syslog-tag=标签,这将修改标识符为 mysqld_safe-标签mysqld-标签

    使用这个选项控制 mysqld 日志记录已弃用。请改用服务器 log_syslog_tag 系统变量。参阅 第 7.4.2.8 节,“错误日志记录到系统日志”

  • --时区=时区

    Command-Line Format --时区=时区
    Type 字符串

    TZ 时区环境变量设置为给定的选项值。请参阅操作系统文档以获取合法的时区规范格式。

  • --用户={用户名|用户ID}

    Command-Line Format --用户={用户名|用户ID}
    Type 字符串
    Type 数字

    以拥有名称 用户名 或数字用户 ID 用户ID 的用户身份运行 mysqld 服务器。(在这里,“用户”指的是系统登录账户,而不是 MySQL 授权表中的用户。)

如果您使用 mysqld_safe 带有 --defaults-file--defaults-extra-file 选项指定选项文件,则该选项必须是命令行上的第一个选项,否则选项文件将不被使用。例如,以下命令不使用指定的选项文件:

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.5 节,“安装布局”。) mysqld_safe 希望以下条件之一为真:

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

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

因为 mysqld_safe 尝试相对于其工作目录找到服务器和数据库,您可以将二进制分布式安装在任何位置,只要您从 MySQL 安装目录运行 mysqld_safe

cd mysql_installation_directory
bin/mysqld_safe &

如果 mysqld_safe 失败,即使从 MySQL 安装目录运行,也可以指定 --ledir--datadir 选项,以指示服务器和数据库在系统上的位置。

mysqld_safe 尝试使用 sleepdate 系统实用程序来确定它尝试启动的次数。如果这些实用程序存在,并且尝试启动的次数每秒超过 5 次, mysqld_safe 等待 1 秒钟,然后再次启动。这旨在防止在重复失败的情况下 CPU 使用率过高。(Bug #11761530,Bug #54035)

当您使用 mysqld_safe 启动 mysqld 时,mysqld_safe 将安排错误(和通知)消息来自自己和 mysqld 到同一个目标。

有多个 mysqld_safe 选项来控制这些消息的目标:

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

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

  • --skip-syslog:不将错误消息写入 syslog。消息将写入默认错误日志文件(主机名.err 在数据目录中),或写入指定文件如果给出了 --log-error 选项。

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

mysqld_safe 写入一条消息时,通知将写入日志目标(syslog 或错误日志文件)和 stdout。错误将写入日志目标和 stderr

Note

mysqld_safe 控制 mysqld 日志记录已经弃用。请使用服务器的原生 syslog 支持。有关更多信息,请参阅 第 7.4.2.8 节,“错误日志记录到系统日志”