| 怎样启动MySQL 服务器和停止MySQL 服务器 |
| 来源:
发布时间:2007-12-07 发布人:
浏览:
人次
字体:
[大
中
小]
|
|
一、以非特权用户运行 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 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 试图确定服务器程序和数据目录的位置。然后用反映这些值的选项调用服务器。afe_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 要自动停止服务器,你不需做特别的事情。 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。 最好是首先尝试用一个向服务器发出一个TERM信号的正常kill看它是否将以正常终止应答。这种方式下,表和日志将正确地被清空。如果服务器阻塞并且不应答一个正常终止信号,你可以用kill -9强制终止它。这是最后的手段了,因为这可能有未清空的修改,而且你冒着让表处于一个不一致状态的风险。 如果你用 kill -9 终止服务器,要确保在启动服务器前用 myisamchk 和 isamchk 检查你的表。 用 --skip-grant-table 选项重启服务器。 这告诉服务器不使用授权表验证连接,这允许你以 root 连接而无须口令。在你已经连接后,改变 root 口令。 要自动停止服务器,你不需做特别的事情。 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。 最好是首先尝试用一个向服务器发出一个 TERM 信号的正常 kill 看它是否将以正常终止应答。这种方式下,表和日志将正确地被清空。如果服务器阻塞并且不应答一个正常终止信号,你可以用 kill -9 强制终止它。这是最后的手段了,因为这可能有未清空的修改,而且你冒着让表处于一个不一致状态的风险。 如果你用 kill -9 终止服务器,要确保在启动服务器前用 myisamchk 和 isamchk 检查你的表。 用 --skip-grant-table 选项重启服务器。 这告诉服务器不使用授权表验证连接,这允许你以 root 连接而无须口令。在你已经连接后,改变 root 口令。
| |
| |
|
|
|
|
| §最新评论:(评论内容只代表网友观点,与本站立场无关!) | |
|
|
|
|
| 注意:请勿在本站发布政治话题、色情及违反法律的内容。 |
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。 |