一以非特权用户运行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 mysqladmmysqlgrp
修改数据目录和任何子目录和文件的权限使得它们只能由mysqladm用户访问如果数据目录是/usr/local/var你可以设置由mysqladm拥有的任何东西
# cd /usr/local/var
# chmod R gorwx
当你设置数据目录及其内容的属主和模式时注意符号连接你需要顺着它们并改变它们指向的文件或目录的属主和模式如果连接文件的目录位于不属于你的地方会有些麻烦你可能需要root身份
在你完成了上述过程后你应该确保总是在以mysqladm或root登录时启动服务器在后者确定指定user=mysqladm选项使服务器能将其用户ID切换到mysqladm(同时也适用于系统启动过程)
user选项在MySQL 中引入如果你有老版本你可以使用su命令告诉系统在以root运行时在特定的用户下运行服务器
二启动服务器的方法
在我们确定了用于运行服务器的账号后你可以选择如何安排启动服务器你可以从命令行手动或在系统引导过程中自动地运行它对于启动服务器由三种主要方法
直接调用mysqld
这可能是最不常用的方法建议不要多使用因此本文不详细介绍
调用safe_mysqld脚本
safe_mysqld试图确定服务器程序和数据目录的位置然后用反映这些值的选项调用服务器safe_mysqld将标准出错设备从服务器重定位到数据目录下的一个出错文件使得有它的一条记录在启动服务器后safe_mysqld也监视它并且如果它死掉则重启它safe_mysqld常用于BSD风格的Unix系统
如果你以root或在系统引导期间启动sqfe_mysqld出错日志由root拥有这可能在你以后试图用一个非特权用户调用safe_mysqld时将导致permission denied(权限拒绝)错误删除出错日志再试一下
调用mysqlserver脚本
这个脚本通过有意用于System V的启动和停止系统上的safe_mysqldmysqlserver来启动服务器该系统包含几个包含在机器进入或退出一个给定运行级别时被点用的脚本目录它可以用一个start或stop参数点用以表明你是想启动还是想停止服务器
safe_mysqld脚本安装在MySQL安装目录的bin目录下或可在MySQL源代码分发的scripts目录下找到mysqlserver脚本安装在MySQL安装目录下的share/mysqld目录下或可以在MySQL源代码分发的support_files目录下找到如果你想使用它们你需要将它们拷贝到适当的目录下
对BSD风格的系统(FreeBSDOpenBSD等)通常在/etc目录下有几个文件在引导时初始化服务这些文件通常有以rc开头的名字且它有可能由一个名为rclocal的文件(或类似的东西)特意用于启动本地安装的服务在这样的系统上你可能将类似于下列的行加入rclocal文件中以启动服务器(如果safe_mysqld的目录在你的系统上不同修改它即可)
if [ x /usr/local/bin/safe_mysqld ]; then
/usr/local/bin/safe_mysqld &
fi
对于对于System V风格的系统你可以通过将mysqlserver放在/etc下适当的启动目录下来安装它如果你运行Linux并从一个RPM文件安装MySQL这些已经为你做好了否则将脚本安装在主启动目录下并将指向它的连接放在适当的运行级别目录下你也可以使脚本只能由root启动
启动文件的目录布局各系统不同所以你需要检查一下看看你的系统如何组织它们例如在Linux PPC上目录是/etc/rcd和/etc/rcd/rcd这样你可以这样安装脚本
#cp mysqlserver /etc/rcd/initd
#cd /etc/initd
#chmod mysqlserver
#cd /etc/rcd/rcd
#ln s /initd/mysqlserver Smysql
在solaris上主脚本目录是/etc/initd并且运行级别目录是/etc/rdd所以命令看上去像这样
#cp mysqlserver /etc/rcd/initd
#cd /etc/initd
#chmod mysqlserver
#cd /etc/rcd
#ln s /initd/mysqlserver Smysql
在系统启动时Smysql脚本将自动用一个start参数调用如果你有chkconfig命令(Linux上有)你可以由它帮助安装mysqlserver脚本而不是象上面那样手工运行上述命令
指定启动选项
如果你想在服务器启动时指定额外的启动选项你可有两种方法你可以修改你使用的启动脚本(safe_mysqld或mysqlserver)并直接在调用服务器的行上指定选项或在一个选项文件中指定选项建议你如果可能在一个全局选项文件中指定选项它通常位于/etc/f(Unix)或c:\f(Windows)
某些种类的信息无法以服务器选项指定对于这些你可能需要修改safe_mysqld例如如果你的服务器不能正确选择本地时区而以GMT返回时间值你可以设置TZ环境变量给它一个指示如果你用safe_mysqld或mysqlserver启动服务器你可以将一个时区设置加到safe_mysqld找到启动服务器的行并在该行前加入下列命令
TZ=US/Central
export TZ
上面命令的语法是Solaris的对于其他系统语法可能不同请查阅相关手册如果你确实修改了你的启动脚本要记住下次你安装MySQL时(如升级到新版本)你的修改将失去除非你首先在别处复制了启动脚本在安装了新版本后比较新旧版本的脚本看看你需要重建什么改变
在启动时检查你的表
除了安排你的服务器在系统引导时启动你可能要安装myisamchk和isamchk脚本以在服务器启动前检查你的表你可能在一个崩溃后重启有可能表已经损害在启动前检查它是一个发现问题的好方法
三停止服务器
要手工启动服务器使用mysqladmin
%mysqladmin shutdown
要自动停止服务器你不需做特别的事情BSD系统一般通过向进程发一个TERM信号停止服务它们或者正确应答它或被粗鲁地杀死mysqld在它收到这个信号时以终止作为应答对于用mysqlserver启动服务器的System V风格的系统停止进程将用一个stop参数调用该脚本告诉服务器终止当然假定你已安装了mysqlserver
四如果你不能连接服务器如何重新获得对服务器的控制
在某些情况下你可能由于不能连接它而手工重启服务器当然这有点矛盾因为一般你通过连接服务器而手工关掉它那么这种情况如何会出现
首先MySQL root口令可以已经设置为你不知道的值这可能发生在你修改口令时例如如果你在输入新口令时偶然键入一个不可见的控制字符你也可能忘记口令
其次连接localhost通常通过一个Unix域套接字文件进行一般是/tmp/mysqlsock如果套接字文件被删除了本地客户就不能连接这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件
如果你因为丢失套接字文件而不能连接你可以简单地通过重启服务器重新创建得到它因为服务器在启动时重新创建它这里的骗局是你不能用套接字建立连接因为它不见了你必须建立一个TCP/IP连接例如如果服务器主机是你可以这样连接
%mysqladmin p u root h shutdown
如果套接字文件被一个cron任务删除问题将重复出现除非你修改cron任务或使用一个或使用一个不同的套接字文件你可以使用全局选项文件