mysqld_safe是在 Unix 上 启动mysqld服务器的推荐方式 mysqld_safe添加了一些安全功能,例如在发生错误时重新启动服务器以及将运行时信息记录到错误日志中。错误记录的描述将在本节后面给出。
对于某些 Linux 平台,从 RPM 或 Debian 软件包安装 MySQL 包括用于管理 MySQL 服务器启动和关闭的 systemd 支持。在这些平台上, 没有安装mysqld_safe,因为它是不必要的。有关详细信息,请参阅 第 2.5.10 节,“使用 systemd 管理 MySQL 服务器”。
在使用 systemd 进行服务器管理的平台上
不使用mysqld_safe
的一个含义
是不支持在选项文件中使用[mysqld_safe]
或
[safe_mysqld]
部分,并且可能导致意外行为。
mysqld_safe尝试启动名为mysqld的可执行文件。要覆盖默认行为并明确指定要运行的服务器的名称,请为mysqld_safe--mysqld
指定一个
或--mysqld-version
选项。您还可以使用
指示mysqld_safe应在其中查找服务器的目录。
--ledir
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接受命令行和选项文件中的选项,如下表所述。有关 MySQL 程序使用的选项文件的信息,请参阅 第 4.2.2.2 节,“使用选项文件”。
表 4.5 mysqld_safe 选项
选项名称 | 描述 | 介绍 | 弃用 |
---|---|---|---|
--basedir | MySQL安装目录路径 | ||
--核心文件大小 | mysqld 应该能够创建的核心文件的大小 | ||
--数据目录 | 数据目录路径 | ||
--defaults-extra-file | 除了通常的选项文件外,还读取命名的选项文件 | ||
--defaults-文件 | 只读命名选项文件 | ||
- 帮助 | 显示帮助信息并退出 | ||
--ledir | 服务器所在目录路径 | ||
--日志错误 | 将错误日志写入命名文件 | ||
--malloc-lib | 用于 mysqld 的替代 malloc 库 | ||
--mysqld | 要启动的服务器程序的名称(在 ledir 目录中) | ||
--mysqld-safe-log-timestamps | 日志记录的时间戳格式 | 5.7.11 | |
--mysqld-版本 | 服务器程序名称的后缀 | ||
- 好的 | 使用nice程序设置服务器调度优先级 | ||
--no-defaults | 不读取选项文件 | ||
--打开文件限制 | mysqld 应该能够打开的文件数 | ||
--pid 文件 | 服务器进程 ID 文件的路径名 | ||
--插件目录 | 安装插件的目录 | ||
- 港口 | 侦听 TCP/IP 连接的端口号 | ||
--skip-kill-mysqld | 不要试图杀死杂散的 mysqld 进程 | ||
--skip-系统日志 | 不要将错误消息写入系统日志;使用错误日志文件 | 是的 | |
- 插座 | 侦听 Unix 套接字连接的套接字文件 | ||
--系统日志 | 将错误消息写入系统日志 | 是的 | |
--syslog-tag | 写入系统日志的消息的标记后缀 | 是的 | |
- 时区 | 将 TZ 时区环境变量设置为命名值 | ||
- 用户 | 以具有名称 user_name 或数字用户 ID user_id 的用户身份运行 mysqld |
显示帮助信息并退出。
MySQL 安装目录的路径。
mysqld 应该能够创建 的核心文件的大小。选项值传递给 ulimit -c。
数据目录的路径。
--defaults-extra-file=
file_name
除了通常的选项文件外,还请阅读此选项文件。如果该文件不存在或无法访问,则服务器退出并出错。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录。如果使用它,这必须是命令行上的第一个选项。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
仅使用给定的选项文件。如果该文件不存在或无法访问,则服务器退出并出错。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录。如果使用它,这必须是命令行上的第一个选项。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
如果mysqld_safe找不到服务器,则使用此选项指示服务器所在目录的路径名。
从 MySQL 5.7.17 开始,这个选项只在命令行上被接受,而不是在选项文件中。在使用 systemd 的平台上,可以在 的值中指定该值
MYSQLD_OPTS
。请参阅 第 2.5.10 节,“使用 systemd 管理 MySQL 服务器”。将错误日志写入给定文件。请参阅 第 5.4.2 节,“错误日志”。
此选项控制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 。
这个选项是在 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 之前,任何库都可以通过指定其路径名来使用,但是tcmalloc
在 MySQL 5.7 中有一种快捷方式可以使用 Linux 的二进制 MySQL 发行版附带的库。快捷方式可能在某些配置下不起作用,在这种情况下,您应该指定一个路径名。笔记从 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会在 MySQL 位置(例如, 或任何合适的位置)中查找tcmalloc
库 。如果找到,则将其路径名添加到 mysqld值 的开头。如果 未找到, mysqld_safe将因错误而中止。/usr/lib
pkglibdir
/usr/local/mysql/lib
tmalloc
LD_PRELOAD
tcmalloc
从 MySQL 5.7.31 开始,
tcmalloc
这不是该--malloc-lib
选项的允许值。如果选项给出为 ,则完整路径将添加到 值的开头。如果完整路径指向不存在或不可读的文件, 则mysqld_safe会因错误而中止。
--malloc-lib=
/path/to/some/library
LD_PRELOAD
对于mysqld_safe添加路径名到 的情况
LD_PRELOAD
,它将路径添加到变量已有的任何现有值的开头。
笔记在使用 systemd 管理服务器的系统上, mysqld_safe不可用。相反,通过在 中设置
LD_PRELOAD
来 指定分配库/etc/sysconfig/mysql
。Linux 用户可以
libtcmalloc_minimal.so
通过将这些行添加到my.cnf
文件中来使用包含在二进制包中:[mysqld_safe] malloc-lib=tcmalloc
这些行也适用于在任何平台上安装
tcmalloc
了/usr/lib
. 要使用特定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 节,“使用 systemd 管理 MySQL 服务器”。此选项类似于
--mysqld
选项,但您只指定服务器程序名称的后缀。基本名称假定为mysqld。例如,如果您使用--mysqld-version=debug
, mysqld_safe将启动目录中的 mysqld-debug程序ledir
。如果参数--mysqld-version
为空,mysqld_safe使用 目录中的mysqldledir
。从 MySQL 5.7.15 开始,这个选项只在命令行上被接受,而不是在选项文件中。在使用 systemd 的平台上,可以在 的值中指定该值
MYSQLD_OPTS
。请参阅 第 2.5.10 节,“使用 systemd 管理 MySQL 服务器”。使用该
nice
程序将服务器的调度优先级设置为给定值。不要读取任何选项文件。如果程序启动因从选项文件中读取未知选项而失败,
--no-defaults
可用于防止它们被读取。如果使用它,这必须是命令行上的第一个选项。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
mysqld应该能够打开 的文件数。选项值传递给ulimit -n。
笔记您必须启动mysqld_safe as
root
才能正常运行。mysqld应该用于其进程 ID 文件 的路径名。
从 MySQL 5.7.2 到 5.7.17,mysqld_safe 有自己的进程 ID 文件,它总是被命名
mysqld_safe.pid
并位于 MySQL 数据目录中。插件目录的路径名。
服务器在侦听 TCP/IP 连接时应使用的端口号。除非服务器由
root
操作系统用户启动,否则端口号必须为 1024 或更高。不要试图在启动时杀死杂散的mysqld进程。此选项仅适用于 Linux。
服务器在侦听本地连接时应使用的 Unix 套接字文件。
--syslog
导致错误消息被发送到syslog
支持记录器程序的系统上。--skip-syslog
禁止使用syslog
; 消息被写入错误日志文件。当
syslog
用于错误记录时,daemon.err
设施/严重性用于所有日志消息。从 MySQL 5.7.5 开始,不推荐 使用这些选项来控制mysqld日志记录。请改用服务器
log_syslog
系统变量。要控制设施,请使用服务器log_syslog_facility
系统变量。请参阅第 5.4.2.3 节,“错误记录到系统日志”。为了记录到
syslog
,来自 mysqld_safe和mysqld的消息 分别用 和 的标识符mysqld_safe
写入mysqld
。要为标识符指定后缀,请使用 ,它将标识符修改为 和 。--syslog-tag=
tag
mysqld_safe-
tag
mysqld-
tag
从 MySQL 5.7.5 开始,不推荐 使用此选项来控制mysqld日志记录。请改用服务器
log_syslog_tag
系统变量。请参阅第 5.4.2.3 节,“错误记录到系统日志”。将
TZ
时区环境变量设置为给定的选项值。有关合法时区规范格式,请参阅您的操作系统文档。以具有名称或数字用户 ID 的用户身份 运行mysqld服务器。(在此上下文中的“用户”指的是系统登录帐户,而不是授权表中列出的 MySQL 用户。)
user_name
user_id
如果使用
或
选项执行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在其工作目录下查找
bin
和data
目录。对于源代码分发,它会查找libexec
和var
目录。如果从 MySQL 安装目录执行mysqld_safe(例如,/usr/local/mysql
对于二进制分发) ,则应该满足此条件。如果找不到相对于工作目录的服务器和数据库,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尝试使用 睡眠和日期系统实用程序来确定它每秒尝试启动的次数。如果存在这些实用程序并且每秒尝试启动的次数大于 5,则 mysqld_safe在再次启动之前等待 1 整秒。这是为了防止在重复出现故障时过度使用 CPU。(缺陷 #11761530,缺陷 #54035)
当您使用mysqld_safe启动 mysqld时,mysqld_safe 安排来自其自身和来自 mysqld的错误(和通知)消息到达相同的目的地。
有几个mysqld_safe选项用于控制这些消息的目的地:
--log-error=
: 将错误信息写入指定的错误文件。file_name
--syslog
:将错误消息写入syslog
支持记录器程序的系统。--skip-syslog
: 不要将错误信息写入syslog
. 消息被写入默认错误日志文件(
在数据目录中),或者如果host_name
.err--log-error
给出选项则写入命名文件。
如果没有给出这些选项,则默认为
--skip-syslog
.
当mysqld_safe写入消息时,通知会转到日志记录目的地(syslog
或错误日志文件)和stdout
. 错误转到日志记录目标和stderr
。
从MySQL 5.7.5 开始不推荐从
mysqld_safe
控制mysqld日志记录。请改用服务器的本机
支持。有关详细信息,请参阅
第 5.4.2.3 节,“错误记录到系统日志”。
syslog