MySQL服务器的启动与停止

本章的说明只用于UNIX系统。如果正在运行Windows系统,可以跳过本章,因为附录A“获得和安装软件”一节中包含了所有需要的启动和关闭命令。 调用本章给出的命令 为了简洁,在大多数情况中,诸如mysqladmin、mysqldump等程序在本章中没有给出任何-h、-u或-p选项。笔者假定您将会用连接服务器所需的任何选项调用这些程序。 用无特权的用户账号运行MySQL服务器 在讨论如何启动服务器之前,考虑一下在服务器启动时应该运行哪个账号。服务器可以手工和自动启动。如果手工启动,则服务器以UNIX用户身份运行。即,如果笔者以paul进行注册并启动服务器,则它将以paul身份运行。如果用su命令将用户切换到root然后启动服务器,则服务器以root身份运行。 但是,大多数时候可能都不会采用手工启动服务器。您很可能将安排服务器在系统引导时作为标准启动过程的一部分自动地运行。在UNIX中,该启动过程由系统以UNIX的root用户的身份执行,该过程中启动的任何进程都用root的权限运行。 应该紧记MySQL服务器启动过程的两个目标: 要服务器以某些非root的用户身份启动。通常,除非进程真的需要root访问权而mysql办不到,否则应限制任何进程的能力。 要服务器始终以同一个用户的身份运行。服务器有时作为一个用户运行而有时又作为另一个用户运行时会产生矛盾。这将导致文件和目录以不同的所有权在该数据下被创建,甚至引起服务器不能访问数据库或表。以同一个用户的身份一致地运行服务器可以避免该问题。 为了以标准的、非特权的用户身份运行数据库,可按如下步骤执行该过程: 1)选择用于运行服务器的账号。mysqld可以以任何用户身份运行,但是很明显,它只为MySQL活动创建了一个单独的账号。您也可以为MySQL专门指定一个组。笔者将调用的这些用户和组的名字命名为mysqladm和mysqlgrp。如果您使用了其他的名字,则在本书中有mysqladm和mysqlgrp的地方替换它们 如果您在自己的账号下安装了MySQL并且系统中没有特定的管理权限,则您可以在自己的ID用户下运行服务器。在这种情况下,应使用您自己的注册名和组名替代mysqladm和mysqlgrp。 如果您利用RPM文件在RedHatLinux下安装了MySQL,则该安装程序将在mysql名下自动创建了一个账号。应使用该名字替换mysqladm。 2)如果必要的话,可用系统常用的账号创建过程来创建服务器账号。这需要以root身份进行操作。 3)关闭服务器修改数据目录以及任何子目录和文件的所有权,使mysqladm用户拥有它们。例如,如果数据目录是/usr/local/var,则可按以下设置mysqladm用户的所有权: #cd/usr/local/var移动到数据目录 #chown-rmysqladmin.mysqlgrp设置所有目录和文件的所有权 5)修改数据目录以及任何子目录和文件的许可权,使得只有mysqladm用户能够访问它们。设置该方式以避免其他人员访问是一种好得安全预防措施。如果数据目录是/usr/local/var,则可通过mysqladm用户按下列操作设置应具有的一切: #cd/usr/local/var移动到数据目录 #chmod-Rgo-rwx使所有一切只对mysqladm可访问 在设置数据目录及其内容的所有权和方式时,观察符号连接。您需要跟踪符号连接并修改所指向的文件或目录的所有权和方式。如果这些连接文件所定位的目录不属于您,则这样做可能会引起麻烦,因此您必须是root用户。 在完成前述过程后,应确保无论是作为mysqladm还是作为root用户注册都始终启动服务器。在后者中,要确保指定了--user=mysqladm的选项,使服务器可以将其用户ID切换到mysqladm。 --user选项被增加到MySQL3.22的mysql中。如果您的版本比MySQL3.22旧,则在启动服务器并作为root用户运行时,可以使用su命令指示系统在指定账号下运行服务器。您需要阅读有关su的人工页,因为作为一个指定用户运行命令的语法被改变了。 启动服务器的方法 如果您已经确定了用来运行服务器的账号,则可以选择安排怎样启动服务器。可以从命令行手工运行,或在系统启动过程中自动运行服务器。有三种启动服务器的主要方法: 直接调用mysqld。这或许是最小的命令方法。除了说明mysqld--help是一个有用的命令(用它可以查找您可利用其他启动方法使用的选项)外,笔者不打算进一步讨论它。 调用safe_mysqld脚本。safe_mysqld试图确定服务器程序和数据目录的位置,然后利用反映这些位置的选项调用服务器。safe_mysqld将服务器的标准错误输出重定向到数据目录的错误文件中,并以记录的形式出现。在启动服务器后,safe_mysqld还监控 服务器,并在其死机时重新启动。safe_mysqld通常用于UNIX的BSD风格的版本。 如果您曾经作为root或在系统启动程序中启动safe_mysqld,则错误日志将由root拥有。如果您试着以非特权的用户身份调用safe_mysqld,则可能引起“所有权被拒绝”的错误。删除该错误文件再试一次。 调用mysql.server脚本。通过运行safe_mysqld.mysql.server,该脚本启动服务器。该脚本建议在使用SystemV启动/关闭系统的系统中使用。这个系统包括几个包含在机器登录或退出一个特定运行级时被调用的脚本的目录。它可以利用start或stop参数进行调用,以指明希望启动还是关闭服务器。 safe_mysqld脚本被安装在MySQL安装目录的bin目录下,或者在MySQL源程序分发包的scripts目录中。mysql.server脚本安装在MySQL安装目录的share/mysql目录下,或者在MySQL源程序分发包的support-files目录中。如果要使用它,应将其 拷贝到合适的启动目录中。 对于BSD风格的系统,在/etc目录中有几个文件相对应,它们在引导期间开始服务。这些文件的名字通常以‘rc'开始,因此很可能会有一个名为rc.local的文件来启动本地的安装服务。在这样的系统中,您可能要按如下方法添加一些行到rc.local文件中以启动服务器(如果路径与您系统中的不同,可将其修改成safe_mysqld): if(-x/usr/local/bin/safe_mysqld);then /usr/local/bin/safe_mysqld& fi 对于SystemV风格的系统,可以通过将其放置在/etc下的合适的启动目录中来安装mysql.server。如果您运行Linux并从RPM文件中安装了MySQL,那么这此操作可能已经完成了。否则,应该在主启动脚本目录中安装该脚本,并在合适的运行级目录中设置对它的连接。您还可使该脚本仅对root用户可执行。 启动文件目录的布局随系统而变化,因此将需要全面检查来弄清系统是怎样组织它们的。例如,在LinuxPPC中,这些目录为/etc/rc.d/init.d和/etc/rc.d/rc3.d。应该按如下方法安装该脚本: #cpmysql.server/etc/rc.d/init.d #cd/etc/init.d #chmod500mysql.server #cd/etc/rc.d/rc3.d #In-s../init.d/mysql.serverS99mysql在Solaris中,主脚本目录为/etc/init.d,运行级目录为/etc/rc2.d,因此上述命令将替换为: #cpmysql.server/etc/init.d #cd/etc/init.d #chmod500mysql.server #cd/etc/rc2.d #In-s../init.d/mysql.servers99mysql在系统启动期间,S99mysql脚本利用start参数自动调用。 如果您拥有chkconfig命令,则可用其帮助安装mysql.server脚本来代替手工运行上述的命令。 1.指定启动选项 在启动服务器时,如果想要指定附加的启动选项,可用两种方法进行操作。您可以修改所使用的启动脚本(safe_mysqld或mysql.server),并在调用服务器的命令行中直接指定这些选项。您还可以在选项文件中指定选项。笔者建议,如果可能的话,应在全局选项文件中指定服务器选项。通常该文件的位置是UNIX中的/etc/my.cnf和Windows中的c:my.cnf。 某些种类的信息不能作为服务器的选项指定。为了这些选项,您可能需要修改safe_mysqld。例如,如果服务器不能正确地拾取GMT中的本地时区和返回时间值,可以设置TZ环境变量以给该变量一个提示。如果用safe_mysqld或mysql.server启动服务器,可以将时区设置增加到safe_mysqld中。找到启动服务器的命令行,并在该行之前增加下列命令: TZ=US/Central exportTZ 这个命令将TZ设置为USCentral时区。您需要使用合适位置的时区。该语法是Solaris的,您的系统可能会有所不同。例如,设置TZ变量的另一个常用语法为: TZ=CST6CDT exportTZ 如果修改了启动脚本,当下次安装MySQL时,将失去这些修改,除非在之前将该启动脚本拷贝到了其他地方。在安装新的版本之后,将您的脚本与新安装的脚本进行比较,以便看看重新建立还需要做什么改动。 2.在启动期间检查表 除了在系统引导时安排服务器的启动外,您还可以安装一个脚本来运行mysamchk和isamchk,以便在服务器启动前对表进行检查。您可能打算在服务器崩溃后重新启动,但表可能已经毁坏了。在服务器启动前检查这些表是发现问题的好办法。第13章包含了有关编写和安装这种脚本的细节。 关闭服务器 要想手工关闭服务器,可使用mysqladmin: %mysqladminshutdown 要想自动关闭服务器,您不需要做特别的操作。BSD系统通常会通过给进程发送一个TERM信号来关闭服务。进程或者对其作出反应,或者被随便地取消。当mysqld接收到信号时,它会通过终止来响应。对于利用mysql.server启动服务器的SystemV-风格的系统,该关闭进程将调用带有stop参数的脚本来指示服务器进行关闭──当然,这是在假定您已经安装了mysql.server的情况下进行的。 在不连接时收回服务器的控制 在某些环境中,由于不能连接到服务器,您需要用手工重新启动它。当然,这有点荒谬,因为一般是通过连接到服务器然后告知服务器终止来手工关闭服务器的。那么这种情况是怎样出现的? 首先,MySQL的root口令可能得到了一个您不知道的值。这种情况可能是在修改口令时发生的─例如,如果在输入新的口令值时碰巧键入了一个不可见的控制字符。还有可能就是完全忘记了口令。 其次,对于localhost的连接通常是通过UNIX域的套接字文件进行的,它一般为/tmp/mysql.sock。如果该套接字文件被删除了,则本地客户机将不能进行连接。如果系统偶尔运行了一个删除/tmp中的临时文件的cron作业,这种情况就可能会发生。 如果因为失去套接字文件而不能进行连接,可以通过重新启动服务器简单地进行恢复,因为服务器在启动期间重新建立了该文件。这里应知道的是,不能用该套接字建立连接而必须建立TCP/IP连接。例如,如果服务器的主机是pit-viper.snake.net,则可以按如下方法进行连接: %mysqladmin-p-uroot-hpit-viper.snake.netshutdown 如果此套接字文件被cron作业删除,则问题将复发,直到您修改cron作业或使用另一个套接字文件为止。您可以用全局选项文件指定另一个套接字文件。例如,如果数据目录为/usr/local/var,则可通过将以下行添加到/etc/my.cnf中来移动套接字文件到那里: [mysqld] socket=/usr/local/var/mysql.sock [client] socket=/usr/local/var/mysql.sock 路径名是为服务器和客户机程序二者所指定的,以便它们能使用相同的套接字文件。如果只对服务器设置路径名,客户机程序将仍然在旧的位置上查找套接字文件。在做出这个修改后应重新启动服务器,使它在新的位置创建套接字文件。 如果由于您忘记了root的口令或将其修改为一个您不知道的值而不能进行连接,则需要收回服务器的控制以便重新设置口令: 关闭服务器。如果您以root用户的身份在服务器主机上进行登录,可用kill命令终止服务器。通过使用ps命令或通过查看服务器的PID文件能找出服务器的ID进程。 最好先试着用标准的kill命令取消服务器,该命令将一个TERM信号发送到服务器上,以查看服务器是否通过关闭信号来响应。也就是说,表和日志将被适当地刷新。如果服务器被堵塞并且没有响应正常的终止信号,可使用kill-9强制终止它。这是最后的一个 方法,因为可能存在未刷新的更改,并且要承担非一致状态下将表保留下来的风险。如果用kill-9终止服务器,应确保在重新启动服务器之前利用myisamchk和isamchk对表进行检查 用--skip-grant-tables选项重新启动服务器。该操作告诉服务器不要使用授权的表检查连接。这允许您作为root用户不用输入口令即可进行连接。在连接之后,修改root的口令。 告诉服务器再利用mysqladminflush-privileges使用授权表启动。如果您的mysqladmin版本不识别flush-privileges,试着进行重新加载。

一、以非特权用户运行MySQL服务器
  在讨论如何启动MySQL服务器之前,让我们考虑一下应该以什么用户身份运行MySQL服务器。服务器可以手动或自动启动。如果你手动启动

它,服务器以你登录Unix(Linux)的用户身份启动,即如果你用paul登录Unix并启动服务器,它用paul运行;如果你用su命令切换到root,然

后运启动服务器,则它以root运行。然而,大多数情况下你可能不想手动启动服务器,最有可能是你安排MySQL服务器在系统引导时自动启动,

作为标准引导过程的一部分,在Unix下,该引导过程由系统的Unix用户root执行,并且任何在该过程中运行的进程均以root权限运行。
  
  你应该牢记MySQL服务器启动过程的两个目标:
  
  你想让服务器以某个非root用户运行。一般地,你想限制任何运行进程的能力,除非确实需要root权限,而MySQL不需要。
  你想让服务器始终以同一个用户运行,此时用一个用户而其他时候以另一个不同的用户运行服务器是很不方便的,这造成了为文件和目录

以具有不同属主的数据目录下被创建,并可能导致服务器不能访问数据库或表,这看你以哪个用户运行。统一用同一个用户运行服务器是你避

免这个问题。
  
  要一个普通的非特权用户运行服务器,按照下列步骤:
  选择一个用于运行服务器的用户,mysqld可以用任何用户运行。但在概念上较清晰的是为MySQL操作创建一个单独的用户。你也可以特别为

MySQL选择一个用户组。本文使用mysqladm和mysqlgrp分别作为用户名和用户组名。
  如果你已在自己的账号下安装好了MySQL且没有系统上的特殊管理权限,你将可能在你自己的用户ID下运行服务器。在这种情况下,用你自

己的登录名和用户组代替mysqladm和mysqlgrp。
  如果你在RedHat Linux上用rpm文件安装MySQL,该安装将自动创建一个名为mysql的账号,用该账号代替mysqladm。
  如果必要,用系统通常的创建用户的过程创建服务器账号,你需要用root做它。
  如果服务器在运行,停止它。
  修改数据目录和任何子目录和文件的属主,这样使得mysqladm用户拥有它们。例如,如果数据目录是/usr/local/var,你可以如下设置mys

qladm的属主(你需要以root运行这些命令):
  
  #cd /usr/local/var
  #chown -R mysqladm.mysqlgrp
  
  修改数据目录和任何子目录和文件的权限,使得它们只能由mysqladm用户访问。如果数据目录是/usr/local/var,你可以设置由mysqladm

拥有的任何东西:
  
  # cd /usr/local/var
  # chmod -R go-rwx
  当你设置数据目录及其内容的属主和模式时,注意符号连接。你需要顺着它们并改变它们指向的文件或目录的属主和模式。如果连接文件

的目录位于不属于你的地方,会有些麻烦,你可能需要root身份。
  
  在你完成了上述过程后,你应该确保总是在以mysqladm或root登录时启动服务器,在后者,确定指定--user=mysqladm选项,使服务器能将

其用户ID切换到mysqladm(同时也适用于系统启动过程)。
  
  --user选项在MySQL 3.22中引入,如果你有老版本,你可以使用su命令告诉系统在以root运行时在特定的用户下运行服务器。
  
  二、启动服务器的方法
  在我们确定了用于运行服务器的账号后,你可以选择如何安排启动服务器。你可以从命令行手动或在系统引导过程中自动地运行它。对于

启动服务器由三种主要方法:
  
  直接调用mysqld。
  这可能是最不常用的方法,建议不要多使用,因此本文不详细介绍。
  调用safe_mysqld脚本。
  safe_皇家赌场手机版,mysqld试图确定服务器程序和数据目录的位置。然后用反映这些值的选项调用服务器。safe_mysqld将标准出错设备从服务器重定位

到数据目录下的一个出错文件,使得有它的一条记录。在启动服务器后,safe_mysqld也监视它并且如果它死掉则重启它。safe_mysqld常用于B

SD风格的Unix系统。
  如果你以root或在系统引导期间启动sqfe_mysqld,出错日志由root拥有,这可能在你以后试图用一个非特权用户调用safe_mysqld时将导

致“permission denied”(权限拒绝)错误,删除出错日志再试一下。
  调用mysql.server脚本。
  这个脚本通过有意用于System V的启动和停止系统上的safe_mysqld.mysql.server来启动服务器,该系统包含几个包含在机器进入或退出

一个给定运行级别时被点用的脚本目录。它可以用一个start或stop参数点用以表明你是想启动还是想停止服务器。
  safe_mysqld脚本安装在MySQL安装目录的bin目录下,或可在MySQL源代码分发的scripts目录下找到。mysql.server脚本安装在MySQL安装

目录下的share/mysqld目录下或可以在MySQL源代码分发的support_files目录下找到。如果你想使用它们,你需要将它们拷贝到适当的目录下


  
  对BSD风格的系统(FreeBSD,OpenBSD等),通常在/etc目录下有几个文件在引导时初始化服务,这些文件通常有以“rc”开头的名字,且

它有可能由一个名为“rc.local”的文件(或类似的东西),特意用于启动本地安装的服务。在这样的系统上,你可能将类似于下列的行加入r

本文由皇家赌场手机版发布于首页,转载请注明出处:MySQL服务器的启动与停止

相关阅读