mysql.server — MySQL Server启动脚本
Unix和类Unix系统上的MySQL发行版包括一个名为MySQL.server的脚本,该脚本使用mysqld_safe启动MySQL服务器。它可以在Linux和Solaris等系统上使用,这些系统使用System V风格的运行目录来启动和停止系统服务。它也被用于MySQL的macOS启动项使用。
mysql.server是mysql源代码树中使用的脚本名称。安装的名称可能不同(例如,mysqld或mysql)。在下面的讨论中,根据您的系统调整名称mysql.server。
注意:对于一些Linux平台,从RPM或Debian包安装MySQL包括对管理MySQL服务器启动和关闭的systemd支持。在这些平台上,没有安装mysql.server和mysqld_safe,因为它们是不必要的。
要使用mysql.server脚本手动启动或停止服务器,请使用start或stop参数从命令行调用它:
mysql.server start
mysql.server stop
mysql.server将位置更改为mysql安装目录,然后调用mysqld_safe。要以特定用户身份运行服务器,请在全局/etc/my.cnf选项文件的[mysqld]组中添加一个适当的用户选项。(如果您在非标准位置安装了mysql的二进制发行版,则可能必须编辑mysql.server。在运行mysqld_safe之前,请对其进行修改,将位置更改为正确的目录。如果您这样做,将来升级mysql时,您修改后的mysql.server版本可能会被覆盖;请复制您编辑后的版本,以便重新安装。)
mysql.server stop通过向服务器发送信号来停止服务器。您也可以通过执行mysqladmin shutdown手动停止服务器。
要在服务器上自动启动和停止MySQL,您必须将启动和停止命令添加到/etc/rc*文件中的适当位置:
- 如果您使用Linux服务器RPM包(MySQL服务器VERSION.RPM)或本机Linux包安装,则MySQL.server脚本可能安装在/etc/init.d目录中,名称为mysqld或MySQL。
- 如果您从源发行版安装MySQL,或者使用不自动安装MySQL.server的二进制发行版格式安装MySQL,则可以手动安装脚本。它可以在MySQL安装目录下的支持文件目录或MySQL源代码树中找到。将脚本复制到名为mysql的/etc/init.d目录中,并使其可执行:
cp mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
安装脚本后,激活脚本以在系统启动时运行所需的命令取决于您的操作系统。在Linux上,您可以使用chkconfig:
chkconfig --add mysql
在一些Linux系统上,以下命令似乎也是完全启用mysql脚本所必需的:
chkconfig --level 345 mysql on
- 在FreeBSD上,启动脚本通常应该放在/usr/local/etc/rc.d/中。将mysql.server脚本安装为/usr/local/etc/rc.d/mysql.server.sh以启用自动启动。rc(8)手册页指出,只有当脚本的基本名称与*.shshell文件名模式匹配时,才会执行该目录中的脚本。目录中存在的任何其他文件或目录都将被忽略。
- 作为前面设置的替代方案,一些操作系统还使用/etc/rc.local或/etc/init.d/boot.local在启动时启动其他服务。要使用此方法启动MySQL,请将如下命令附加到相应的启动文件中:
/bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'
ysql.server从选项文件的[mysql.server]和[mysqld]部分读取选项。为了向后兼容性,它还读取[mysql_server]部分,但要保持最新,您应该将这些部分重命名为[mysql.server]。
您可以在全局/etc/my.cnf文件中添加mysql.server的选项。典型的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只支持将start和stop作为命令行参数。
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文件设置放在[mysqld-safe]和[mysqld]组中。
service-startup-timeout=seconds
等待服务器启动确认的时间(秒)。如果服务器在此时间内没有启动,mysql.server将退出并返回错误。默认值为900。值为0表示根本不等待启动。负值表示永远等待(没有超时)。
mysqld_multi — 管理多个MySQL服务器
mysqld_multi被设计用于管理几个mysqld进程,这些进程侦听不同Unix套接字文件和TCP/IP端口上的连接。它可以启动或停止服务器,或报告其当前状态。
注意:对于一些Linux平台,从RPM或Debian包安装MySQL包括对管理MySQL服务器启动和关闭的systemd支持。在这些平台上,没有安装mysqld_multi,因为这是不必要的。
mysqld_multi在my.cnf(或--defaults file选项命名的文件)中搜索名为[mysqldN]的组。N可以是任何正整数。在下面的讨论中,这个数字被称为选项组号或GNR。组号将选项组彼此区分开来,并用作mysqld_multi的参数,以指定要启动、停止或获取状态报告的服务器。这些组中列出的选项与用于启动mysqld的[mysqld]组中使用的选项相同。但是,当使用多个服务器时,每个服务器都必须使用自己的值作为选项,如Unix套接字文件和TCP/IP端口号。
要调用mysqld_multi,请使用以下语法:
mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]
start、stop、reload(stop和restart)和report指示要执行的操作。您可以对单个服务器或多个服务器执行指定的操作,具体取决于选项名称后面的GNR列表。如果没有列表,mysqld_multi将对选项文件中的所有服务器执行操作。
每个GNR值表示一个选项组号或组号范围。该值应为选项文件中组名末尾的数字。例如,名为[mysqld17]的组的GNR为17。要指定一个数字范围,请用短划线将第一个数字和最后一个数字分隔开。GNR值10-13表示组[mysqld10]到[mysqld13]。可以在命令行上指定多个组或组范围,并用逗号分隔。GNR列表中不得有空白字符(空格或制表符);忽略空白字符之后的任何内容。
此命令使用选项组[mysqld17]启动单个服务器:
mysqld_multi start 17
此命令使用选项组[mysqld8]和[mysqld10]到[mysqld13]停止多台服务器:
mysqld_multi stop 8,10-13
有关如何设置选项文件的示例,请使用以下命令:
mysqld_multi --example
mysqld_multi按如下方式搜索选项文件:
- --no-defaults,不读取任何选项文件。
-
--defaults-file=file_name, 只读这个被命名了的选项文件。
- 否则,将读取标准位置列表中的选项文件,包括由--defaults extra file=file_name选项命名的任何文件(如果给定)。(如果多次给定该选项,则使用最后一个值。)
读取的选项文件将搜索[mysqld_multi]和[mysqldN]选项组。[mysqld_multi]组可用于mysqld_multi本身的选项。[mysqldN]组可以用于传递给特定mysqld实例的选项。
[mysqld]或[mysqld_safe]组可用于所有mysqld或mysqld_safe实例读取的公共选项。您可以指定--defaults file=file_name选项为该实例使用不同的配置文件,在这种情况下,该文件中的[mysqld]或[mysqld_safe]组将用于该实例。
mysqld_multi支持以下选项:
显示帮助消息并退出。
显示示例选项文件。
指定日志文件的名称。如果该文件存在,则会将日志输出附加到该文件中。
用于停止服务器的mysqladmin二进制文件。
要使用的mysqld二进制文件。请注意,您也可以指定mysqld_safe作为此选项的值。如果使用mysqld_safe启动服务器,则可以将mysqld或ledir选项包含在相应的[mysqldN]选项组中。这些选项指示mysqld_safe应该启动的服务器的名称以及服务器所在目录的路径名。
[mysqld38]
mysqld = mysqld-debug
ledir = /opt/local/mysql/libexec
将日志信息打印到stdout,而不是打印到日志文件。默认情况下,输出将转到日志文件。
调用mysqladmin时要使用的MySQL帐户的密码。请注意,与其他MySQL程序不同,此选项的密码值不是可选的。
静音模式;禁用警告。
通过TCP/IP端口而不是Unix套接字文件连接到每个MySQL服务器。(如果缺少套接字文件,则服务器可能仍在运行,但只能通过TCP/IP端口访问。)默认情况下,使用Unix套接字文件进行连接。此选项影响停止和报告操作。
调用mysqladmin时要使用的MySQL帐户的用户名。
更详细一些。
显示版本信息并退出。
关于mysqld_multi的一些注意事项:
- 最重要的是:在使用mysqld_multi之前,请确保您了解传递给mysqld服务器的选项的含义,以及为什么您希望拥有单独的mysqld进程。注意将多个mysqld服务器与同一数据目录一起使用的危险。使用单独的数据目录,除非您知道自己在做什么。在线程化系统中,使用相同的数据目录启动多个服务器不会给您带来额外的性能。
确保特定mysqld进程启动时使用的Unix帐户可以完全访问每台服务器的数据目录。除非你知道自己在做什么,否则不要使用Unix根帐户。
- 确保用于停止mysqld服务器(使用mysqladmin程序)的MySQL帐户对每台服务器都具有相同的用户名和密码。此外,请确保该帐户具有SHUTDOWN权限。如果要管理的服务器的管理帐户的用户名或密码不同,则可能需要在每台服务器上创建一个具有相同用户名和密码的帐户。例如,您可以通过对每台服务器执行以下命令来设置一个通用的multi_admin帐户:
$> mysql -u root -S /tmp/mysql.sock -p
Enter password:
mysql> CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';
mysql> GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
您必须为每个mysqld服务器执行此操作。连接到每个连接参数时,请适当更改连接参数。请注意,帐户名的主机名部分必须允许您作为multi_admin从要运行mysqld_multi的主机进行连接。
每个mysqld的Unix套接字文件和TCP/IP端口号必须不同。(或者,如果主机有多个网络地址,可以设置bind_address系统变量,使不同的服务器侦听不同的接口。)
如果使用mysqld_safe启动mysqld(例如,--mysqld=mysqld_safe),那么--pid file选项非常重要。每个mysqld都应该有自己的进程ID文件。使用mysqld_safe而不是mysqld的优点是,mysqld_safe监视其mysqld进程,如果进程由于使用kill-9发送的信号或其他原因(如分段故障)而终止,则会重新启动它。
您可能想为mysqld使用--user选项,但要做到这一点,您需要以Unix超级用户(root)的身份运行mysqld_multi脚本。在选项文件中包含该选项并不重要;如果您不是超级用户,并且mysqld进程是在您自己的Unix帐户下启动的,那么您只会收到一个警告。
以下示例显示了如何设置选项文件以与mysqld_multi一起使用。mysqld程序的启动或停止顺序取决于它们在选项文件中的显示顺序。组号不需要形成一个完整的序列。示例中有意省略了第一组和第五组[mysqldN],以说明选项文件中可能存在“间隙”。这给了你更多的灵活性。
# This is an example of a my.cnf file for mysqld_multi.
# Usually this file is located in home dir ~/.my.cnf or /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = my_password
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/data2/hostname.pid2
datadir = /usr/local/mysql/data2
language = /usr/local/mysql/share/mysql/english
user = unix_user1
[mysqld3]
mysqld = /path/to/mysqld_safe
ledir = /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/data3/hostname.pid3
datadir = /usr/local/mysql/data3
language = /usr/local/mysql/share/mysql/swedish
user = unix_user2
[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/data4/hostname.pid4
datadir = /usr/local/mysql/data4
language = /usr/local/mysql/share/mysql/estonia
user = unix_user3
[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/data6/hostname.pid6
datadir = /usr/local/mysql/data6
language = /usr/local/mysql/share/mysql/japanese
user = unix_user4