Mysqld safe

来自泡泡学习笔记
BrainBs讨论 | 贡献2023年7月4日 (二) 13:15的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

mysqld_safe是在Unix系统上启动MySql服务器的推荐方式。mysqld_safe添加了一些新的安全特性,诸如错误发生时自动重启、记录运行时日志。

mysqld_safe会尝试去启动一个可执行的mysqld。mysqld_safe无法识别的选项会传递给mysqld。


注意
对于某些 Linux 平台,从 RPM 或 Debian 安装 MySQL 包时会包含 systemd 支持来管理 MySQL 服务器的启动和关闭。在这些平台上,不需要安装 mysqld_safe。

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


mysqld_safe 尝试启动一个名为 mysqld 的可执行文件。如果要覆盖默认行为并明确指定要运行的服务器名称,请在 mysqld_safe 中指定 --mysqld 或 --mysqld-version 选项。您还可以使用 --ledir 来指示 mysqld_safe 寻找服务器的目录。


许多 mysqld_safe 的选项与 mysqld 的选项相同。


对于 mysqld_safe 不识别的选项,如果在命令行中指定了这些选项,则会传递给 mysqld,但如果在选项文件的 [mysqld_safe] 组中指定了这些选项,则会被忽略。


mysqld_safe 从选项文件的 [mysqld]、[server] 和 [mysqld_safe] 部分读取所有选项。例如,如果您像这样指定了一个 [mysqld] 部分,mysqld_safe 将找到并使用 --log-error 选项:

[mysqld]
log-error=error.log


为了保持向后兼容性,mysqld_safe 还会读取 [safe_mysqld] 部分,但为了使其更加现代化,您应将这样的部分重命名为 [mysqld_safe]。


mysqld_safe 可以接受来自命令行和选项文件的选项。

--help

显示帮助消息并退出。


--basedir=dir_name

MySQL安装目录的路径。


--core-file-size=size

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


注意
innodb_buffer_pool_in_core_file变量可用于在支持此功能的操作系统上减小核心文件的大小。


--datadir=dir_name

数据目录的路径。


--defaults-extra-file=file_name

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


--defaults-file=file_name

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


--ledir=dir_name

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

此选项仅接受在命令行上使用,而不接受在选项文件中使用。对于使用systemd的平台,可以在MYSQLD_OPTS的值中指定该值。


--log-error=file_name

将错误日志写入给定的文件。


--mysqld-safe-log-timestamps

此选项控制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()库。选项的值必须是以下目录之一:/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开始,--malloc-lib选项不允许使用tcmalloc作为值。
  • 如果该选项被指定为--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文件中添加以下行来在任何已安装tcmalloc软件包的平台上使用libtcmalloc_minimal.so库:

[mysqld_safe]
malloc-lib=tcmalloc


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

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


--mysqld=prog_name

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

该选项只接受命令行参数,不接受选项文件。对于使用systemd的平台,则可以在MYSQLD_OPTS的值中指定该选项的值。


--mysqld-version=suffix

该选项类似于--mysqld选项,但只需指定服务器程序名称的后缀。基础名称默认为mysqld。例如,如果使用--mysqld-version=debug,mysqld_safe会在ledir目录中启动mysqld-debug程序。如果--mysqld-version的参数为空,mysqld_safe会在ledir目录中使用mysqld。


该选项只接受命令行参数,不接受选项文件。对于使用systemd的平台,则可以在MYSQLD_OPTS的值中指定该选项的值。


--nice=priority

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


--no-defaults

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


--open-files-limit = count

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

注意
为了正常运行,您必须以root身份启动mysqld_safe。


--pid-file = file_name

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


--plugin-dir = dir_name

插件目录的路径名。


--port = port_num

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


--skip-kill-mysqld

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


--socket = path

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


--syslog,--skip-syslog

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


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


已弃用使用这些选项来控制mysqld日志记录。


--syslog-tag = tag

对于日志记录到syslog中的消息,mysqld_safe和mysqld分别带有标识符mysqld_safe和mysqld。要为这些标识符指定后缀,请使用--syslog-tag = tag,它将修改标识符为mysqld_safe-tag和mysqld-tag。


已弃用使用此选项来控制mysqld日志记录。请改为使用服务器log_syslog_tag系统变量。


--timezone=timezone

将TZ时区环境变量设置为给定的选项值。请参考操作系统文档了解合法的时区规范格式。


--user={user_name|user_id}

以具有名称user_name或数字用户ID user_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服务器,尽管这些类型的发行版通常在稍微不同的位置安装服务器。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 &


如果即使在从MySQL安装目录调用mysqld_safe的情况下,mysqld_safe仍然失败,请使用--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=file_name:将错误消息写入指定的错误文件。
  • --syslog:将错误消息写入支持logger程序的系统日志中。
  • --skip-syslog:不将错误消息写入系统日志。消息将被写入默认的错误日志文件(数据目录中的host_name.err),或者如果指定了--log-error选项,则写入指定的文件。


如果没有给出这些选项中的任何一个,则默认为--skip-syslog。


当mysqld_safe写入消息时,通知会发送到日志目标(系统日志或错误日志文件)和标准输出(stdout)。错误信息会发送到日志目标和标准错误(stderr)。

注意:
从mysqld_safe控制mysqld日志已被弃用。请改用服务器本身的原生syslog支持。