Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

6.3.2 mysqld_safe — MySQL 服务器启动脚本

mysqld_safe 是在 Unix 上启动 MySQL 服务器的推荐方式。mysqld_safe 添加了一些安全特性,如在发生错误时重启服务器以及将运行时信息记录到一个错误日志中。关于错误日志的描述稍后在本节中给出。

Note

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

在不使用 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 选项

Option Name Description
--basedir MySQL 安装目录路径
--core-file-size mysqld 可以创建的核心文件大小
--datadir 数据目录路径
--defaults-extra-file 除了通常的选项文件外,读取额外的选项文件
--defaults-file 只读指定的选项文件
--help 显示帮助信息并退出
--ledir 服务器所在目录路径
--log-error 将错误日志写入指定文件
--malloc-lib 用于 mysqld 的备用内存分配库
--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 以 user_name 用户或用户 ID 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_名
    Type 目录名称

    数据目录的路径。

  • --defaults-extra-file=file_name

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

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

    有关此和其他影响选项文件处理的命令行选项的更多信息,请参阅第6.2.2.3节,“Command-Line Options that Affect Option-File Handling”

  • --defaults-file=file_name

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

    只使用给定的选项文件。如果文件不存在或无法访问,服务器将以错误退出。如果 file_name 不是绝对路径名,它将被解释为相对于当前目录的相对路径。这必须在命令行中作为第一个选项使用,如果使用了。

    有关此和其他影响选项文件处理的命令行选项的更多信息,请参阅第6.2.2.3节,“Command-Line Options that Affect Option-File Handling”

  • --ledir=dir_name

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

    如果mysqld_safe无法找到服务器,请使用这个选项来指示服务器位置的目录路径。

    这个选项只能在命令行中接受,不能在选项文件中。对于使用systemd的平台,可以将值指定为MYSQLD_OPTS的值。请参阅第2.5.9节,“Managing MySQL Server with systemd”

  • --log-error=file_name

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

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

  • --mysqld-safe-log-timestamps

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

    系统

    连字符

    遗留

    这个选项控制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格式,如mysqld_safe在MySQL 5.6中使用。

    • LEGACY, legacy

      YYMMDD hh:mm:ss 格式,例如在 MySQL 5.6 之前使用的 mysqld_-safe

  • --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=tcmallocmysqld_safe 会在 /usr/lib 中寻找一个名为 tcmalloc 的库。如果找到 tmalloc,则其路径名会被添加到 LD_PRELOAD 值的开始处。如果没有找到 tcmallocmysqld_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 用户可以在任何支持的平台上使用 libtcmalloc_minimal.so 库,只要该库安装在 /usr/lib 中,并将以下行添加到 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 目录中的)的名称。如果 mysqld_safe 无法找到服务器,请使用 --ledir 选项来指示服务器位置的路径名。

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

  • --mysqld-version=后缀

    Command-Line Format --mysqld-version=后缀
    Type 字符串

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

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

  • --nice=优先级

    Command-Line Format --nice=优先级
    Type 数字

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

  • --no- defaults

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

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

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

  • --open- files-limit=计数

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

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

    Note

    您必须以root身份启动mysqld_safe,才能使其正常工作。

  • --pid- file=文件名

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

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

  • --plugin- dir=目录名

    Command-Line Format --plugin- dir=目录名
    Type 目录名

    插件目录的路径名。

  • --port=端口号

    Command-Line Format --port=数字
    Type 数字

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

  • --skip-kill-mysqld

    Command-Line Format --skip-kill-mysqld

    在启动时不要尝试杀死漂浮的mysqld进程。这一选项仅在Linux上有效。

  • --socket=path

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

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

  • --syslog, --skip-syslog

    Command-Line Format --syslog
    Deprecated
    Command-Line Format --skip-syslog
    Deprecated

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

    当使用syslog进行错误日志记录时,所有日志消息都会使用daemon.err设施/严重性。

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

  • --syslog-tag=tag

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

    对于将消息写入syslog,来自mysqld_safemysqld的标识符分别是mysqld_safemysqld。要指定标识符的后缀,请使用--syslog-tag=tag,这将修改标识符为mysqld_safe-tagmysqld-tag

    使用这一选项来控制mysqld日志记录已被弃用。请使用服务器log_syslog_tag系统变量代替。参阅第7.4.2.8节,“Error Logging to the System Log”

  • --timezone=timezone

    Command-Line Format --timezone=timezone
    Type 字符串

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

  • --user={user_name|user_id}

    Command-Line Format --user={user_name|user_id}
    Type 字符串
    Type 数字

    运行mysqld服务器,以用户名为user_ name或数字用户IDuser_id。(“User”在这个上下文中指的是系统登录账户,不是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的地方)找到。对于二进制分发,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。(Bug #11761530, Bug #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

Note

mysqld_safe控制mysqld的日志记录是过时的。请使用服务器本身的syslog支持代替。有关更多信息,请参阅第7.4.2.8节,“错误日志到系统日志”