文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  mysqld_safe — MySQL 服务器启动脚本

6.3.2 mysqld_safe — MySQL 服务器启动脚本

mysqld_safe 是在 Unix 上启动 mysqld 服务器的推荐方式。mysqld_safe 添加了一些安全功能,例如在发生错误时重新启动服务器,以及将运行时信息记录到错误日志。本节稍后将介绍错误日志记录。

注意

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

在使用 systemd 进行服务器管理的平台上不使用 mysqld_safe 的一个含义是,不支持在选项文件中使用 [mysqld_safe][safe_mysqld] 部分,并且可能会导致意外行为。

mysqld_safe 尝试启动名为 mysqld 的可执行文件。要覆盖默认行为并明确指定要运行的服务器的名称,请为 mysqld_safe 指定 --mysqld--mysqld-version 选项。您还可以使用 --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 选项

选项名称 说明
--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 不要将错误消息写入系统日志;使用错误日志文件
--socket 用于侦听 Unix 套接字连接的套接字文件
--syslog 将错误消息写入系统日志
--syslog-tag 写入系统日志的消息的标签后缀
--timezone 将 TZ 时区环境变量设置为指定的值
--user 以具有名称 user_name 或数字用户 ID user_id 的用户身份运行 mysqld

  • --help

    命令行格式 --help

    显示帮助消息并退出。

  • --basedir=dir_name

    命令行格式 --basedir=dir_name
    类型 目录名

    MySQL 安装目录的路径。

  • --core-file-size=size

    命令行格式 --core-file-size=size
    类型 字符串

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

    注意

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

  • --datadir=dir_name

    命令行格式 --datadir=dir_name
    类型 目录名

    数据目录的路径。

  • --defaults-extra-file=file_name

    命令行格式 --defaults-extra-file=file_name
    类型 文件名

    除了常用的选项文件外,还要读取此选项文件。如果文件不存在或无法访问,服务器将退出并报错。如果 file_name 不是绝对路径名,则相对于当前目录解释它。如果使用此选项,则它必须是命令行上的第一个选项。

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

  • --defaults-file=file_name

    命令行格式 --defaults-file=file_name
    类型 文件名

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

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

  • --ledir=dir_name

    命令行格式 --ledir=dir_name
    类型 目录名

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

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

  • --log-error=file_name

    命令行格式 --log-error=file_name
    类型 文件名

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

  • --mysqld-safe-log-timestamps

    命令行格式 --mysqld-safe-log-timestamps=type
    类型 枚举
    默认值 utc
    有效值

    system

    hyphen

    legacy

    此选项控制 mysqld_safe 生成的日志输出中时间戳的格式。以下列表描述了允许的值。对于任何其他值,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

  • --malloc-lib=[lib_name]

    命令行格式 --malloc-lib=[lib-name]
    类型 字符串

    用于内存分配的库的名称,而不是系统 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 库。如果找到 tmalloc,则其路径名将添加到 mysqldLD_PRELOAD 值的开头。如果未找到 tcmalloc,则 mysqld_safe 将中止并报错。

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

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

    • 对于 mysqld_safe 将路径名添加到 LD_PRELOAD 的情况,它会将该路径添加到变量已有的任何值的开头。

    注意

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

    Linux 用户可以通过在 my.cnf 文件中添加以下几行,在任何平台上使用 libtcmalloc_minimal.so 库,其中在 /usr/lib 中安装了 tcmalloc 软件包

    [mysqld_safe]
    malloc-lib=tcmalloc

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

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

    命令行格式 --mysqld=file_name
    类型 文件名

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

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

  • --mysqld-version=suffix

    命令行格式 --mysqld-version=suffix
    类型 字符串

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

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

  • --nice=priority

    命令行格式 --nice=priority
    类型 数值

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

  • --no-defaults

    命令行格式 --no-defaults
    类型 字符串

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

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

  • --open-files-limit=count

    命令行格式 --open-files-limit=count
    类型 字符串

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

    注意

    您必须以 root 用户身份启动 mysqld_safe,此功能才能正常工作。

  • --pid-file=file_name

    命令行格式 --pid-file=file_name
    类型 文件名

    mysqld 应该用于其进程 ID 文件的路径名。

  • --plugin-dir=dir_name

    命令行格式 --plugin-dir=dir_name
    类型 目录名

    插件目录的路径名。

  • --port=port_num

    命令行格式 --port=number
    类型 数值

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

  • --skip-kill-mysqld

    命令行格式 --skip-kill-mysqld

    启动时不要尝试终止无关的 mysqld 进程。此选项仅适用于 Linux。

  • --socket=path

    命令行格式 --socket=文件名称
    类型 文件名

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

  • --syslog, --skip-syslog

    命令行格式 --syslog
    已弃用
    命令行格式 --skip-syslog
    已弃用

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

    当使用 syslog 记录错误时,所有日志消息都使用 daemon.err 工具/严重性级别。

    不建议使用这些选项来控制 mysqld 日志记录。要将错误日志输出写入系统日志,请使用 第 7.4.2.8 节 “将错误记录到系统日志” 中的说明。要控制工具,请使用服务器 log_syslog_facility 系统变量。

  • --syslog-tag=标签

    命令行格式 --syslog-tag=标签
    已弃用

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

    不建议使用此选项来控制 mysqld 日志记录。请改用服务器 log_syslog_tag 系统变量。请参阅 第 7.4.2.8 节 “将错误记录到系统日志”

  • --timezone=时区

    命令行格式 --timezone=时区
    类型 字符串

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

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

    命令行格式 --user={用户名|用户 ID}
    类型 字符串
    类型 数值

    以具有名称 用户名 或数字用户 ID 用户 ID 的用户的身份运行 mysqld 服务器。(用户 在此上下文中指的是系统登录帐户,而不是授权表中列出的 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.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 的二进制发行版,只要您从 MySQL 安装目录运行 mysqld_safe 即可

cd mysql_installation_directory
bin/mysqld_safe &

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

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

当您使用 mysqld_safe 启动 mysqld 时,mysqld_safe 会安排将来自自身和 mysqld 的错误(和注意)消息发送到同一目标。

有几个 mysqld_safe 选项可用于控制这些消息的目标

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

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

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

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

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

注意

不建议从 mysqld_safe 控制 mysqld 日志记录。请改用服务器本身的 syslog 支持。有关更多信息,请参阅 第 7.4.2.8 节 “将错误记录到系统日志”