服务器启动(服务器启动后又停止了)

lxf2023-06-04 07:20:01

Mysql|服务器

启动和停止MySQL服务器
[晏子]

首先,以非特权用户的身份运行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,可以如下设置mysqladm的所有者(需要以root身份运行这些命令):

    # CD/usr/local/var
    # chown-r MySQL ADM . MySQL grp
    修改数据目录。如果数据目录是/usr/local/var,那么可以设置mysqladm拥有的任何东西:

    # CD/usr/local/var
    # chmod-rgo-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时出现“权限被拒绝”错误。请删除错误日志,然后重试。调用mysql.server脚本。
    该脚本通过safe_mysqld.mysql.server启动服务器,该脚本专门用于启动和停止System V,该系统包含几个脚本目录,当机器进入或退出给定的运行级别时会单击这些目录。它可以使用一个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启动。
    启动文件的目录布局各系统不同,所以你需要检查一下看看你的系统如何组织它们。例如在Linux PPC上,目录是/etc/rc.d和/etc/rc.d/rc3.d,这样你可以这样安装脚本:#cp mysql.server /etc/rc.d/init.d#cd /etc/init.d#chmod 500 mysql.server#cd /etc/rc.d/rc3.d#ln -s ../init.d/mysql.server S99mysql
    在solaris上,主脚本目录是/etc/init.d,并且运行级别目录是/etc/rd2.d,所以命令看上去像这样:#cp mysql.server /etc/rc.d/init.d#cd /etc/init.d#chmod 500 mysql.server#cd /etc/rc2.d#ln -s ../init.d/mysql.server S99mysql
    在系统启动时,S99mysql脚本将自动用一个start参数调用。如果你有chkconfig命令(Linux上有),你可以由它帮助安装mysql.server脚本而不是象上面那样手工运行上述命令。

    2.1指定启动选项


    如果你想在服务器启动时指定额外的启动选项,你可有两种方法。你可以修改你使用的启动脚本(safe_mysqld或mysql.server)并直接在调用服务器的行上指定选项,或在一个选项文件中指定选项。建议你如果可能在一个全局选项文件中指定选项,它通常位于/etc/my.cnf(Unix)或c:\my.cnf(Windows)。
    某些种类的信息无法以服务器选项指定。对于这些你可能需要修改safe_mysqld。例如,如果你的服务器不能正确选择本地时区而以GMT返回时间值,你可以设置TZ环境变量给它一个指示。如果你用safe_mysqld或mysql.server启动服务器,你可以将一个时区设置加到safe_mysqld。找到启动服务器的行并在该行前加入下列命令:TZ=US/Centralexport TZ
    上面命令的语法是Solaris的,对于其他系统语法可能不同,请查阅相关手册。如果你确实修改了你的启动脚本,要记住下次你安装MySQL时(如升级到新版本),你的修改将失去,除非你首先在别处复制了启动脚本。在安装了新版本后,比较新旧版本的脚本,看看你需要重建什么改变。

    2.2开机检查手表。


    除了安排你的服务器在系统引导时启动,你可能要安装myisamchk和isamchk脚本,以在服务器启动前检查你的表。你可能在一个崩溃后重启,有可能表已经损害,在启动前检查它是一个发现问题的好方法。

    第三,停止服务器


    要手工启动服务器,使用mysqladmin:
    %mysqladmin shutdown
    要自动停止服务器,你不需做特别的事情。BSD系统一般通过向进程发一个TERM信号停止服务,它们或者正确应答它或被粗鲁地杀死。mysqld在它收到这个信号时以终止作为应答。对于用mysql.server启动服务器的System V风格的系统,停止进程将用一个stop参数调用该脚本,告诉服务器终止,当然假定你已安装了mysql.server。

    四、如果无法连接到服务器,如何重新控制服务器?


    在某些情况下,你可能由于不能连接它而手工重启服务器。当然,这有点矛盾。因为一般你通过连接服务器而手工关掉它,那么这种情况如何会出现。
    首先,MySQL root口令可以已经设置为你不知道的值,这可能发生在你修改口令时,例如,如果你在输入新口令时偶然键入一个不可见的控制字符。你也可能忘记口令。
    其次,连接localhost通常通过一个Unix域套接字文件进行,一般是/tmp/mysql.sock。如果套接字文件被删除了,本地客户就不能连接。这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件。
    如果你因为丢失套接字文件而不能连接,你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。这里的骗局是你不能用套接字建立连接因为它不见了,你必须建立一个TCP/IP连接,例如,如果服务器主机是pit.snake.net,你可以这样连接:
    %mysqladmin -p -u root -h pit.snake.net shutdown
    如果套接字文件被一个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-table选项重新启动服务器。
    这告诉服务器不要使用授权表来验证连接,这允许您在没有密码的情况下作为root用户进行连接。连接后更改root密码。告诉服务器使用mysqladmin flush-privileges重新开始使用授权表
    。如果您的mysqladmin版本不知道flash-privileges,请尝试重新加载。
  • 五、运行多台服务器


    大多数再一台给定的机器上运行单个MySQL服务器,但在很多情况下,运行多个服务器是很有用的:
  • 您可能希望测试服务器的新版本,并保留正在运行的生产服务器。在这种情况下,您将运行不同的服务器代码。操作系统通常会限制每个进程打开文件句柄的数量。如果您的系统很难提高这个限制,运行多个服务器是解决这个限制的一种方法。在这种情况下,您可以运行统一服务器的多个实例。ISP经常为其客户提供自己的MySQL安装,因此有必要涉及一个单独的服务器。在这种情况下,如果不同的客户需要不同版本的MySQL,您可能会运行相同版本或不同版本的多个实例。

  • 很自然地,运行多个服务器比只运行一个服务器要复杂得多。如果你安装多个版本,你不能在同一个地方安装所有东西。当服务器运行时,某些参数必须或很可能对每个服务器是唯一的,它们包括服务器在哪安装、其数据目录的路径名、TCP/IP端口和UNIX域套接字路径名以及用于运行服务器的UNIX账号(如果你不再同一账号下运行所有服务器)。如果你决定运行多个服务器,一定要注意你使用的参数,是你不至于丢失对所发生的事情的踪迹。

    5.1配置和安装多台服务器


    如果你要运行不同版本的服务器而不是同一版本的多个实例,你必须在不同地点安装它们。如果你安装二进制分发(不用RPM),它们将安装在包含不同版本号的目录名下。如果你从源代码安装,最简单的方法是在每个版本运行configure配置MySQL安装过程中使用--with-prefix选项使得不同分发分开,这将使得所有东西安装在一个单独的目录下,你可以将目录域分发版本号联系起来,如,你可以象这样配置一个MySQL分发,其中version是MySQL版本号:
    %.configure --with-prefix=/usr/local/mysql-version
    --with-prefix选项也决定了服务器的一个唯一数据目录。你可能想加上其它服务器特定的选项,如TCP/IP端口号和套接字路径名(--with-tcp-port和--with-unix-socket)。
    如果你想运行同一版本服务器的多个实例,任何必须基于一个服务器特定设置的选项将需要在运行时指定。

    5.2多服务器启动过程


    启动多个服务器比使用一个服务器要复杂。因为safe_mysqld和mysql.server均在单个服务器设置上工作得最好。建议你仔细研究一下safe_mysqld并用它作为你的启动过程的基础,使用你修改的版本,你能针对你自己的需要更精确地裁剪它。
    你必须处理的一个问题是如何在选项文件(my.cnf)中指定选项。对于多服务器,你不能对于每个不同的服务器设置使用/etc/my.cnf,你只能对所有服务器相同的设置使用该文件。如果服务器有一个不同的编译进去的数据目录位置,你可以在每个服务器数据目录中的my.cnf中指定所有服务器要使用的设置,而使用DATADIR/my.cnf指定服务器特定的设置,这里DATADIR以服务器不同而不同。
    另一种指定服务器选项的方法是用--default-file=path_name作为命令行的第一个选项,告诉服务器从名为path_name中的文件中读取选项,这样你可以把一个服务器选项放在一个对该服务器唯一的文件中,然后告诉服务器在启动时读取该文件。注意,如果你指定这个选项,将不使用通常的选项文件如/etc/my.cnf的任何一个。



    adminjs.cn是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 Adminjs.cn还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 在Adminjs.cn中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!