MYSQL 服务器和 服务器启动程序
1.mysqld — Mysql 服务器
MySQL服务器管理对包含数据库和表的MySQL数据目录的访问。 数据目录也是其他信息(如日志文件和状态文件)的默认位置。
当MySQL服务器启动时,它监听来自客户端程序的网络连接并代表这些客户端管理对数据库的访问。
MySQL服务器也有一组系统变量,在运行时影响它的运行。 可以在服务器启动时设置系统变量,并且可以在运行时更改许多系统变量以实现动态服务器重新配置。 MySQL服务器也有一组状态变量,提供有关其操作的信息。 您可以监视这些状态变量以访问运行时性能特征。
2.mysqld_safe –MySQL 服务器启动脚本
mysqld_safe是在Unix上启动mysqld服务器的推荐方式。 mysqld_safe添加了一些安全功能,例如发生错误时重新启动服务器,并将运行时信息记录到错误日志文件中。 错误记录的描述在本节后面给出。
注意:
从MySQL 5.7.6开始,对于使用RPM分发的MySQL安装,服务器启动和关闭由Linux平台上的systemd进行管理。 在这些平台上,mysqld_safe不再安装,因为这是不必要的。
mysqld_safe试图启动一个名为mysqld的可执行文件。 要覆盖默认行为并明确指定要运行的服务器的名称,请为mysqld_safe指定–mysqld或–mysqld-version选项。 您也可以使用–ledir来指示mysqld_safe应该在哪里查找服务器。
如果在命令行中指定了mysqld_safe未知的选项,则将其传递给mysqld,但如果在选项文件的[mysqld_safe]组中指定了它们,则会将其忽略。
mysqld_safe读取选项文件中[mysqld],[server]和[mysqld_safe]部分的所有选项。 例如,如果你像这样指定一个[mysqld],mysqld_safe将会找到并使用–logerror选项:
[mysqld]
log-error=error.log
为了向后兼容,mysqld_safe也读取[safe_mysqld]部分,但是现在您应该将这些部分重命名为[mysqld_safe]。
下面简述一些参数选项:
- –basedir=dir_name
MYSQL 安装目录的路径
- –core-file-size=size
mysqld应该能够创建的核心文件的大小。 选项值被传递给ulimit -c。
- –datadir=dir_name
数据目录的路径
- –defaults-extra-file=file_name
除了通常的选项文件以外,要读取的选项文件的名称。 如果使用的话,这必须是命令行中的第一个选项。 如果该文件不存在或无法访问,则服务器将退出并显示错误。
- –defaults-file=file_name
要读取的选项文件的名称,而不是通常的选项文件。 如果使用的话,这必须是命令行中的第一个选项。
- –ledir=dir_name
如果mysqld_safe找不到服务器,请使用此选项指示服务器所在目录的路径名。
- –log-error=file_name
将错误日志写入给定的文件。
- –malloc-lib=[lib_name]
用于内存分配的库的名称,而不是系统malloc()库。 任何库都可以通过指定其路径名来使用,但是有一个快捷方式可以使用MySQL 5.7中用于Linux的二进制MySQL发行版附带的tcmalloc库。 在某些配置下,快捷方式可能不起作用,在这种情况下,您应该指定一个路径名称。
-malloc-lib选项通过修改LD_PRELOAD环境值以影响动态链接来启动加载程序以在mysqld运行时查找内存分配库:
- 如果没有给出该选项,或者没有赋值(–malloc-lib =),LD_PRELOAD不会被修改,也不会尝试使用tcmalloc。
- 如果选项以–malloc-lib = tcmalloc的形式给出,mysqld_safe将在/usr/lib中查找tcmalloc库,然后在MySQL pkglibdir位置(例如,/usr/local/mysql/lib或其他适当的位置)中查找。 如果找到tmalloc,则将其路径名添加到mysqld的LD_PRELOAD值的开头。 如果找不到tcmalloc,mysqld_safe会中止并返回错误
- 如果该选项以–malloc-lib=/path/to/some/library的形式给出, 那么将该完整路径添加到LD_PRELOAD值的开头。 如果完整路径指向一个不存在的或不可读的文件,mysqld_safe将中止一个错误。
- 对于mysqld_safe向LD_PRELOAD添加路径名的情况,它将路径添加到变量已经具有的任何现有值的开头
注意:
在使用systemd管理服务器的系统上,mysqld_safe不可用。 而是通过在/etc/sysconfig/mysql中设置LD_PRELOAD来指定分配库。
Linux用户可以使用包含在二进制包中的libtcmalloc_minimal.so,将这些行添加到my.cnf文件中:
[mysqld_safe]
malloc-lib=tcmalloc
这些行对于在/usr/lib中安装了tcmalloc软件包的任何平台上的用户也是足够的。 要使用特定的tcmalloc库,请指定其完整路径名称。 例:
[mysqld_safe]
malloc-lib=/opt/lib/libtcmalloc_minimal.so
- –mysqld=prog_name
要启动的服务器程序(在ledir目录中)的名称。 如果您使用MySQL二进制分布版,但是数据目录不在二进制分布 版中,则需要此选项。 如果mysqld_safe找不到服务器,请使用–ledir选项指示服务器所在目录的路径名。
- –mysqld-version=suffix
该选项类似于–mysqld选项,但是只指定服务器程序名称的后缀。 基本名称被假定为mysqld。 例如,如果使用–mysqldversion=debug,mysqld_safe将启动ledir目录中的mysqld-debug程序。 如果–mysqld-version的参数为空,则mysqld_safe在ledir目录中使用mysqld。
- –nice=priority
使用nice程序将服务器的调度优先级设置为给定的值。
- –no-defaults
不读取任何选项文件。 如果使用的话,这必须是命令行中的第一个选项。
- –open-files-limit=count
mysqld应该能够打开的文件的数量。 该选项值传递给ulimit -n。
注意:
您必须以root身份启动mysqld_safe才能正常运行。
- –pid-file=file_name
进程ID文件的路径名称。在MySQL 5.7.2和更高版本中,启动时,mysqld_safe在MySQL数据目录中创建一个名为mysqld_safe.pid的PID文件(BUG #16776528)。
- –plugin-dir=dir_name
插件目录的路径名称。
- –port=port_num
侦听TCP / IP连接时服务器应使用的端口号。 除非服务器由根系统用户启动,否则端口号必须为1024或更高。
- –skip-kill-mysqld
不要试图在启动时杀死流氓mysqld进程。 该选项仅适用于Linux。
- –socket=path
服务器在侦听本地连接时应使用的Unix套接字文件。
- –syslog, –skip-syslog
–syslog会导致在支持记录器程序的系统上将错误消息发送到系统日志。
–skip-syslog禁止使用syslog; 消息被写入错误日志文件。
使用syslog时,daemon.err facility/severity将用于所有日志消息。
从MySQL 5.7.5开始,不推荐使用这些选项来控制mysqld日志记录。 改用服务器的log_syslog系统变量。 要控制设施,请使用服务器log_syslog_facility系统变量。
- –syslog-tag=tag
为了记录到syslog,mysqld_safe和mysqld的消息分别用mysqld_safe和mysqld的标识符写入。 要为标识符指定后缀,请使用–syslogtag = tag,它将标识符修改为mysqld_safe-tag和mysqld-tag。
从MySQL 5.7.5开始,不推荐使用这个选项来控制mysqld日志记录。 改用服务器log_syslog_tag系统变量。
- –timezone=timezone
将TZ时区环境变量设置为给定的选项值。 请参阅您的操作系统文档以获取法定时区规范格式。
- –user={user_name|user_id}
以具有名称user_name或数字用户标识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目录和数据目录。 对于源代码发行版,它会查找libexec和var目录。 如果从MySQL安装目录执行mysqld_safe(例如,二进制分发版本的/ usr / local / mysql),应该满足这个条件。
- 如果找不到相对于工作目录的服务器和数据库,mysqld_safe将尝试通过绝对路径名找到它们。 典型的位置是/usr/local/libexec和/usr/local/var。 实际的位置是根据配置到分发时的值确定的。 如果MySQL安装在配置时指定的位置,它们应该是正确的。
由于mysqld_safe会尝试查找与其自己的工作目录相关的服务器和数据库,因此只要从MySQL安装目录运行mysqld_safe,就可以在任何地方安装MySQL的二进制分发:
shell> cd mysql_installation_directory
shell> bin/mysqld_safe &
如果mysqld_safe失败,即使从MySQL安装目录中调用,指定–ledir和–datadir选项以指示服务器和数据库位于您的系统上的目录。
mysqld_safe会尝试使用睡眠和日期系统实用程序来确定每秒尝试启动的次数。 如果这些实用程序存在并且每秒启动次数大于5,则mysqld_safe等待1秒钟,然后再次启动。 这是为了防止在重复故障的情况下CPU使用率过高。 (错误#11761530,BUG#54035)
当您使用mysqld_safe启动mysqld时,mysqld_safe会安排从自身和mysqld发出的错误(和通知)消息到达相同的目的地。
有几个mysqld_safe选项用于控制这些消息的目的地:
- –log-error=file_name:将错误消息写入指定的错误文件。
- –syslog:将错误消息写入支持记录器程序的系统上的系统日志
- –skip-syslog:不要将错误消息写入syslog。 消息被写入默认错误日志文件(数据目录中的host_name.err),如果给出了–log-error选项,则会写入一个命名文件。
如果没有给出这些选项,则默认是–skip-syslog。
当mysqld_safe写入消息时,通知项转到日志记录目标(syslog或错误日志文件)和stdout。 错误转到记录目标和stderr。
注意:
从MySQL 5.7.5开始控制mysqld_safe的mysqld日志不被使用。 改用服务器的本地系统日志支持。
3 mysql.server — MySQL 服务器启动脚本
Unix上的MySQL发行包括一个名为mysql.server的脚本,它使用mysqld_safe启动服务器。 它可用于Linux和Solaris等使用System V风格运行目录的系统来启动和停止系统服务。 它也被用于MySQL的OS X启动项目。
注意:
从MySQL 5.7.6开始,对于使用RPM分发的MySQL安装,服务器启动和关闭由多个Linux平台上的systemd进行管理。 在这些平台上,mysql.server和mysqld_safe不再安装,因为它们是不必要的
要使用mysql.server脚本手动启动或停止服务器,请使用start或stop参数调用它:
shell> mysql.server start
shell> mysql.server stop
在mysql.server启动服务器之前,它将位置更改为MySQL安装目录,然后调用mysqld_safe。 要以某些特定用户的身份运行服务器,请在本节稍后部分中向/etc/my.cnf选项文件的[mysqld]组中添加适当的用户选项。 (如果你已经在非标准位置安装了MySQL的二进制发行版,你可能必须编辑mysql.server,修改它以在运行mysqld_safe之前将其改变到正确的目录中,如果你这样做了,你修改后的mysql版本 如果将来升级MySQL,.server可能会被覆盖,所以你应该复制一个你可以重新安装的编辑版本。)
mysql.server停止通过向它发送信号来停止服务器。 您也可以通过执行mysqladmin shutdown手动停止服务器。
要在您的服务器上自动启动和停止MySQL,必须将启动和停止命令添加到/etc/rc*文件中的相应位置。
如果使用Linux服务器RPM软件包(MySQL-server-VERSION.rpm)或本地Linux软件包安装,则可以使用名称mysql将mysql.server脚本安装在/etc/init.d目录中。
一些供应商提供的RPM软件包以不同的名称(如mysqld)来安装启动脚本。
如果您从源代码发行版安装MySQL,或者使用不自动安装mysql.server的二进制分发格式,则可以手动安装。 该脚本可以在MySQL安装目录下的support-files目录下或MySQL源代码树中找到。 将其复制到名为mysql的/etc/init.d目录中,然后使其可执行:
shell> cp mysql.server /etc/init.d/mysql
shell> chmod +x /etc/init.d/mysql
注意:
较旧的红帽系统使用/etc/rc.d/init.d目录而不是/etc/init.d。 相应地调整前面的命令。 或者,首先创建/etc/init.d作为指向/etc/rc.d/init.d的符号链接:
shell> cd /etc
shell> ln -s rc.d/init.d .
安装脚本之后,启动系统启动所需的命令取决于您的操作系统。 在Linux上,您可以使用chkconfig:
shell> chkconfig –add mysql
在一些Linux系统上,下面的命令对于完全启用mysql脚本似乎也是必需的:
shell> chkconfig –level 345 mysql on
在FreeBSD上,启动脚本通常应该放在/usr/local/etc/rc.d/中。 rc(8)手册页指出,只有在其基本名称与* .sh shell文件名称模式相匹配的情况下,才能执行此目录中的脚本。 目录中的任何其他文件或目录都将被忽略。 换句话说,在FreeBSD中,你应该将mysql.server脚本安装为/usr/local/etc/rc.d/mysql.server.sh来启用自动启动。
作为上述设置的替代方法,某些操作系统也使用/etc/rc.local或/etc/init.d/boot.local在启动时启动其他服务。 要使用此方法启动MySQL,请将如下所示的命令附加到适当的启动文件中:
/bin/sh -c ‘cd /usr/local/mysql; ./bin/mysqld_safe –user=mysql &’
对于其他系统,请查阅您的操作系统文档以了解如何安装启动脚本。
mysql.server从选项文件的[mysql.server]和[mysqld]部分读取选项。 为了向后兼容,它也读取[mysql_server]部分,但是要当前您应该将这些部分重命名为[mysql.server]。
您可以在全局的/etc/my.cnf文件中添加mysql.server的选项。 典型的/etc/my.cnf文件可能如下所示:
[mysqld]
datadir=/usr/local/mysql/var
socket=/var/tmp/mysql.sock
port=3306
user=mysql
[mysql.server]
basedir=/usr/local/mysql
mysql.server脚本支持以下选项。 如果指定,则必须将其放在选项文件中,而不是放在命令行上。 mysql.server仅支持作为命令行参数的启动和停止。
- –basedir=dir_name
MySQL安装目录的路径。
- –datadir=dir_name
MySQL数据目录的路径。
- –pid-file=file_name
服务器应写入其进程ID的文件的路径名称。
如果未指定此选项,则mysql.server将使用默认值host_name.pid。传递给mysqld_safe的PID文件值将覆盖[mysqld_safe]选项文件组中指定的任何值。 因为mysql.server读取[mysqld]选项文件组而不是[mysqld_safe]组,所以可以确保在使用mysql.server调用mysqld_safe时获得的值与通过在同一个pid-file设置中手动调用 [mysqld_safe]和[mysqld]组。
- –service-startup-timeout=seconds
在几秒钟内等待服务器启动确认。 如果服务器在这段时间内没有启动,mysql.server会退出并显示错误。 默认值是900.值为0意味着根本不等待启动。 负值意味着永远等待(不超时)。