Mysqld safe
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支持。