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 | 不将错误消息写入 syslog;使用错误日志文件 |
| --socket | 用于侦听 Unix 套接字连接的套接字文件 |
| --syslog | 将错误消息写入 syslog |
| --syslog-tag | 写入 syslog 的消息的后缀标签 |
| --timezone | 将 TZ 时区环境变量设置为指定的 值 |
| --user | 以拥有 user_name 或数字用户 ID user_id 的用户身份运行 mysqld |
-
命令行格式 --help显示帮助消息并退出。
-
命令行格式 --basedir=dir_name类型 目录名称 MySQL 安装目录的路径。
-
命令行格式 --core-file-size=size类型 字符串 mysqld 能够创建的核心文件的大小。该选项值传递给 ulimit -c。
注意innodb_buffer_pool_in_core_file变量可以用于在支持它的操作系统上减小核心文件的大小。有关更多信息,请参阅 第 17.8.3.7 节,“从核心文件中排除或包括缓冲池页”。 -
命令行格式 --datadir=dir_name类型 目录名称 数据目录的路径。
--defaults-extra-file=file_name命令行格式 --defaults-extra-file=file_name类型 文件名 除了通常的选项文件之外,还会读取此选项文件。如果文件不存在或无法访问,服务器将退出并显示错误消息。如果
file_name不是绝对路径名,则将其解释为相对于当前目录的路径。如果使用此选项,它必须是命令行中的第一个选项。有关此选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-file=file_name类型 文件名 仅使用给定的选项文件。如果文件不存在或无法访问,服务器将退出并显示错误消息。如果
file_name不是绝对路径名,则将其解释为相对于当前目录的路径。如果使用此选项,它必须是命令行中的第一个选项。有关此选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
命令行格式 --ledir=dir_name类型 目录名称 如果 mysqld_safe 找不到服务器,可以使用此选项指定服务器所在目录的路径名。
此选项只接受命令行参数,不接受选项文件参数。在使用 systemd 的平台上,可以在
MYSQLD_OPTS的值中指定该值。请参阅 第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”。 -
命令行格式 --log-error=file_name类型 文件名 将错误日志写入给定的文件。请参阅 第 7.4.2 节,“错误日志”。
-
命令行格式 --mysqld-safe-log-timestamps=type类型 枚举 默认值 utc有效值 systemhyphenlegacy此选项控制 mysqld_safe 生成的日志输出中时间戳的格式。以下列表描述了允许的值。对于任何其他值,mysqld_safe 会记录警告并使用
UTC格式。UTC,utcISO 8601 UTC 格式(与服务器的
--log_timestamps=UTC相同)。这是默认设置。SYSTEM,systemISO 8601 本地时间格式(与服务器的
--log_timestamps=SYSTEM相同)。HYPHEN,hyphenYY-MM-DD h:mm:ss格式,与 MySQL 5.6 中的 mysqld_safe 相同。LEGACY,legacyYYMMDD hh:mm:ss格式,与 MySQL 5.6 之前的 mysqld_safe 相同。
-
命令行格式 --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,则会将其路径名添加到 mysqld 的LD_PRELOAD值的开头。如果未找到tcmalloc,mysqld_safe 将退出并显示错误消息。从 MySQL 8.0.21 开始,
tcmalloc不再是--malloc-lib选项的允许值。如果该选项被指定为
--malloc-lib=,则该完整路径将添加到/path/to/some/libraryLD_PRELOAD值的开头。如果完整路径指向不存在或不可读的文件,mysqld_safe 将退出并显示错误消息。对于 mysqld_safe 将路径名添加到
LD_PRELOAD的情况,它会将路径添加到该变量可能已有的任何现有值的开头。
注意在使用 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=file_name类型 文件名 您要启动的服务器程序(在
ledir目录中)的名称。如果您使用 MySQL 二进制发行版,但数据目录位于二进制发行版之外,则需要此选项。如果 mysqld_safe 找不到服务器,可以使用--ledir选项指定服务器所在目录的路径名。此选项只接受命令行参数,不接受选项文件参数。在使用 systemd 的平台上,可以在
MYSQLD_OPTS的值中指定该值。请参阅 第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”。 -
命令行格式 --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程序将服务器的调度优先级设置为给定的值。 -
命令行格式 --no-defaults类型 字符串 不读取任何选项文件。如果程序启动由于从选项文件读取未知选项而失败,可以使用
--no-defaults阻止读取它们。如果使用此选项,它必须是命令行中的第一个选项。有关此选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
命令行格式 --open-files-limit=count类型 字符串 mysqld 能够打开的文件数量。该选项值传递给 ulimit -n。
注意您必须以
root身份启动 mysqld_safe 才能使其正常运行。 -
命令行格式 --pid-file=file_name类型 文件名 mysqld 用于其进程 ID 文件的路径名。
-
命令行格式 --plugin-dir=dir_name类型 目录名称 插件目录的路径名。
-
命令行格式 --port=number类型 数字 服务器在监听 TCP/IP 连接时使用的端口号。端口号必须为 1024 或更高,除非服务器由
root操作系统用户启动。 -
命令行格式 --skip-kill-mysqld在启动时不要尝试杀死任何无主的 mysqld 进程。此选项只适用于 Linux。
-
命令行格式 --socket=file_name类型 文件名 服务器在侦听本地连接时应使用的 Unix 套接字文件。
-
命令行格式 --syslog已弃用 是 命令行格式 --skip-syslog已弃用 是 --syslog会导致错误消息被发送到支持 logger 程序的系统上的syslog。--skip-syslog会抑制使用syslog;消息将被写入错误日志文件。当使用
syslog进行错误日志记录时,所有日志消息将使用daemon.err设施/严重性。使用这些选项来控制 mysqld 日志记录已弃用。要将错误日志输出写入系统日志,请使用 第 7.4.2.8 节,"错误日志记录到系统日志" 中的说明。要控制设施,请使用服务器
log_syslog_facility系统变量。 -
命令行格式 --syslog-tag=tag已弃用 是 对于日志记录到
syslog,来自 mysqld_safe 和 mysqld 的消息将分别使用mysqld_safe和mysqld的标识符写入。要指定标识符的后缀,请使用--syslog-tag=,这会将标识符修改为tagmysqld_safe-和tagmysqld-。tag使用此选项来控制 mysqld 日志记录已弃用。请改用服务器
log_syslog_tag系统变量。参见 第 7.4.2.8 节,"错误日志记录到系统日志"。 -
命令行格式 --timezone=timezone类型 字符串 将
TZ时区环境变量设置为给定的选项值。请查阅您的操作系统文档以了解有效的时区规范格式。 -
命令行格式 --user={user_name|user_id}类型 字符串 类型 数字 以具有名称
user_name或数字用户 IDuser_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_nummysqld_safe 脚本的编写方式是,通常可以启动从 MySQL 的源代码或二进制发行版安装的服务器,即使这些类型的发行版通常会在略微不同的位置安装服务器。(参见 第 2.1.5 节,"安装布局"。)mysqld_safe 预计以下条件之一为真
服务器和数据库可以在工作目录(调用 mysqld_safe 的目录)中找到。对于二进制发行版,mysqld_safe 在其工作目录下查找
bin和data目录。对于源代码发行版,它会查找libexec和var目录。如果您从您的 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 尝试使用 sleep 和 date 系统实用程序来确定它尝试启动的次数。如果这些实用程序存在并且每秒的尝试启动次数大于 5 次,则 mysqld_safe 等待 1 秒钟后再启动。这样做是为了防止在重复失败的情况下过度使用 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。
从 mysqld_safe 控制 mysqld 日志记录已弃用。请改用服务器的本地 syslog 支持。有关详细信息,请参见 第 7.4.2.8 节,"错误日志记录到系统日志"。