日期:2013-07-05  浏览次数:20511 次

在讨论如何启动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,你可以如下设置mysqladm的属主(你需求以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常用于BSD风格的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”的文件(或类似的东西),特意用于启动本地安装的服务。在这样的系统上,你可能将类似于下列的行加入rc.local文件中以启动服务器(如果safe_mysqld的目录在你的系统上不同,修正它即可):

    if [ -x /usr/local/bin/safe_mysqld ]; then
    /usr/local/bin/safe_mysqld &
    fi
    对于对于System V风格的系统,你可以通过将mysql.server放在/etc下适当的启动目录下来安装它。如果你运转Linux并从一个RPM文件安装MySQL,这些曾经为你做好了,否则将脚本安装在主启动目录下,并将指向它的连接放在适当的运转级别目录下。你也可以使脚本只能由root启动。