6.3.2 mysqld_safe — MySQL 服务器启动脚本
mysqld_safe 是在 Unix 上启动 MySQL 服务器的推荐方式。mysqld_safe 添加了一些安全特性,如在发生错误时重启服务器以及将运行时信息记录到一个错误日志中。关于错误日志的描述稍后在本节中给出。
对于一些 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 |
-
Command-Line Format --help
显示帮助信息并退出。
-
Command-Line Format --basedir=dir_name
Type 目录名 MySQL 安装目录的路径。
-
Command-Line Format --core-file-size=size
Type 字符串 mysqld 可以创建的核心文件大小。该选项值将传递给 ulimit -c。
Note可以使用
innodb_buffer_pool_in_core_file
变量来减少操作系统支持的核心文件大小。有关更多信息,请参阅第 17.8.3.7 节,“排除或包括缓冲池页面在核心文件中”。 -
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”。
-
Command-Line Format --defaults-file=file_名
Type 文件名称 只使用给定的选项文件。如果文件不存在或无法访问,服务器将以错误退出。如果
file_name
不是绝对路径名,它将被解释为相对于当前目录的相对路径。这必须在命令行中作为第一个选项使用,如果使用了。有关此和其他影响选项文件处理的命令行选项的更多信息,请参阅第6.2.2.3节,“Command-Line Options that Affect Option-File Handling”。
-
Command-Line Format --ledir=dir_名
Type 目录名称 如果mysqld_safe无法找到服务器,请使用这个选项来指示服务器位置的目录路径。
这个选项只能在命令行中接受,不能在选项文件中。对于使用systemd的平台,可以将值指定为
MYSQLD_OPTS
的值。请参阅第2.5.9节,“Managing MySQL Server with systemd”。 -
Command-Line Format --log-error=file_名
Type 文件名称 将错误日志写入给定的文件。请参阅第7.4.2节,“The Error Log”。
-
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。
-
-
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
的库。如果找到tmalloc
,则其路径名会被添加到LD_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
时,它会将路径添加到任何现有值的开始处。
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
-
-
Command-Line Format --mysqld=file_name
Type 文件名 您想要启动的服务器程序(在
ledir
目录中的)的名称。如果 mysqld_safe 无法找到服务器,请使用--ledir
选项来指示服务器位置的路径名。这项选项仅在命令行上接受,不在选项文件中。对于使用systemd的平台,可以将值指定为
MYSQLD_OPTS
的值。请参阅第2.5.9节,“使用systemd管理MySQL服务器”。 -
Command-Line Format --mysqld-version=后缀
Type 字符串 这项选项与
--mysqld
类似,但您只需指定服务器程序名称的后缀。基名被假定为mysqld。例如,如果使用--mysqld-version=调试
,mysqld_safe将启动mysqld-debug程序在ledir
目录中。如果--mysqld-version
的参数为空,mysqld_safe将使用mysqld在ledir
目录中。这项选项仅在命令行上接受,不在选项文件中。对于使用systemd的平台,可以将值指定为
MYSQLD_ OPTS
。请参阅第2.5.9节,“使用systemd管理MySQL服务器”。 -
Command-Line Format --nice=优先级
Type 数字 使用
nice
程序将服务器的调度优先级设置为给定的值。 -
Command-Line Format --no- defaults
Type 字符串 不要读取任何选项文件。如果程序启动失败,因为从选项文件中读取了未知选项,
--no- defaults
可以防止它们被读取。这必须是命令行上的第一个选项,如果使用的话。有关此类以及其他影响选项文件处理的命令行选项的更多信息,请参阅第6.2.2.3节,“影响选项文件处理的命令行选项”。
-
Command-Line Format --open- files-limit=计数
Type 字符串 mysqld应该能够打开的文件数量。选项值被传递给ulimit -n。
Note您必须以
root
身份启动mysqld_safe,才能使其正常工作。 -
Command-Line Format --pid- file=文件名
Type 文件名 mysqld应该使用的进程ID文件路径名。
-
Command-Line Format --plugin- dir=目录名
Type 目录名 插件目录的路径名。
-
Command-Line Format --port=数字
Type 数字 服务器在监听TCP/IP连接时应该使用的端口号。端口号必须是1024或更高,除非服务器由操作系统用户
root
启动。 -
Command-Line Format --skip-kill-mysqld
在启动时不要尝试杀死漂浮的mysqld进程。这一选项仅在Linux上有效。
-
Command-Line Format --socket=file_name
Type 文件名 服务器应该使用的Unix套接字文件,当监听本地连接时。
-
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
系统变量。 -
Command-Line Format --syslog-tag=tag
Deprecated 是 对于将消息写入
syslog
,来自mysqld_safe和mysqld的标识符分别是mysqld_safe
和mysqld
。要指定标识符的后缀,请使用--syslog-tag=
,这将修改标识符为tag
mysqld_safe-
和tag
mysqld-
。tag
使用这一选项来控制mysqld日志记录已被弃用。请使用服务器
log_syslog_tag
系统变量代替。参阅第7.4.2.8节,“Error Logging to the System Log”。 -
Command-Line Format --timezone=timezone
Type 字符串 将环境变量
TZ
设置为给定选项值。请参阅您的操作系统文档,以获取合法的时区规范格式。 -
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在其工作目录下查找
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。(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
。
从mysqld_safe控制mysqld的日志记录是过时的。请使用服务器本身的syslog
支持代替。有关更多信息,请参阅第7.4.2.8节,“错误日志到系统日志”。