MySQL Server和Server启动程序(二)

 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按如下方式搜索选项文件:

  • 否则,将读取标准位置列表中的选项文件,包括由--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

  • 19
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值