本章要点:服务器的启动客户机与服务器的连接一些SQL语句的功能一些专用客户机的使用在我们阅读了前两章,了解了MySQL并且安装成功MySQL服务器之后,可以开始学习这个强大而复杂的系统。客户机/服务器的体系结构是MySQL的特点之一,我们首先需要熟悉MySQL客户机和服务器的使用,了解客户机如何与服务器连接。客户机使用SQL语言与MySQL服务器通信。为了与MySQL服务器进行通信,必须熟练掌握SQL。例如,在使用诸如mysql客户机这样的程序时,其功能首先是作为一种发送SQL语句给服务器执行的工具。而且,如果编写使用编程语言所提供的MySQL接口的程序时,也必须熟悉SQL语言,因为需要发送SQL语句与服务器沟通。本章也将对大部分SQL语句作一个详细的描述。本章涉及的SQL语句多数都是和数据的存储、检索有关,其它少量的SQL语句将在其它各章陆续介绍。3.1MySQL的启动与终止由于MySQL服务器具有多种安装分发,而且能够运行在多种操作平台之上,因此它的启动与停止的方法也多种多样。你可以根据实际情况使用其中的一种。在你安装、升级或者维护系统时,你可能需要多次启动和终止服务器,你需要了解启动和终止服务器的方方面面。数数数据据据库库库的的的基基基本本本操操操作作作第第33章章3.1.1直接运行守护程序1、你可以采用的方法一般的,你可以有以下几种选择启动MySQL服务器,它们的功能和用法几乎是相同的,所以一起在这里介绍:直接使用MySQL守护程序mysqld启动数据库系统,尤其是Win32平台上的分发,这是因为,在Win32平台上没有mysql.server等服务器脚本可用。通过调用safe_mysqld脚本,它接受与mysqld相同的参数,并试图为mysqld决定正确的选项,然后选择用那些运行它。2、脚本或者守护程序的存放位置对于二进制分发的安装,mysqld守护程序安装在MySQL安装目录的bin目录下,或者可在MySQL源代码分发的libexec目录下找到,缺省为/usr/local/libexec/。对于rpm分发,mysqld应该位于PATH变量决定的程序搜索路径中,因此可以直接引用。safe_mysqld仍旧是一个脚本,并且只存在于Unix平台的分发中。safe_mysqld脚本安装在MySQL安装目录的bin目录下,或可在MySQL源代码分发的scripts目录下找到。对于rpm分发,该脚本应该位于PATH变量决定的程序搜索路径中,因此可以直接引用。3、为什么要使用safe_mysqld脚本safe_mysqld接受和mysqld同样的参数,并试图确定服务器程序和数据库目录的位置,然后利用这些位置调用服务器。safe_mysqld将服务器的标准错误输出重定向到数据库目录中的错误文件中,并以记录的形式存在。启动服务器后,safe_mysqld还监控服务器,并在其死机时重新启动。safe_mysqld通常用于Unix的BSD风格的版本。如果,你曾经为root或在系统启动程序中启动safe_mysqld,其错误日志将有root拥有。如果再用非特权的用户身份调用safe_mysqld,则可能引起“AccessDenied”(即,“所有权被拒绝”)的错误。此时可以删除错误文件在试一次。由于safe_mysqld脚本的功能,使用safe_mysqld脚本明显比直接启动mysqld守护程序来得有效。4、启动服务器的完整过程对于Unix平台上的分发,如果你以root或在系统引导期间启动sqfe_mysqld,出错日志由root拥有,这可能在你以后试图用一个非特权用户调用safe_mysqld时将导致“permissiondenied”(权限拒绝)错误,删除出错日志再试一下。因此建议你在启动服务器前,首先切换到一个专门的用户mysql。具体方法如下:Unix平台$sumysql$safe_mysql&(或者mysqld&,不推荐)Win32平台C:\mysql\binmysqld--standalone或者C:\mysql\binmysqld-nt–standalone如果你使用mysqld并且没有把mysql安装在标准的位置,通常需要提供—basedir选项你的数据库的安装位置。$safe_mysqld--basedir=”/path/to/mysql”&(Unix平台)c:\mysql\binmysqld--basedir=”x:/path/to/mysql”(Win32平台)5、使用safe_mysqld脚本实现服务器的自动启动同样你可以利用safe_mysqld和mysqld实现服务器随操作系统自动启动。对于Linux系统以及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由于这样在引导时启动,将使用root身份启动数据库,在某些时候可能会产生问题和麻烦。这是你可以指定--user选项,因此可以将上面的代码修改为:if[-x/usr/local/bin/safe_mysqld];then/usr/local/bin/safe_mysqld--user=mysql--datadir=/path/to/data&fi3.1.2使用脚本mysql.server启动关闭数据库对于Unix平台上的分发,比较好的办法是使用数据库脚本mysql.server,启动和关闭数据库。1、mysql.server脚本的存放位置mysql.server脚本安装在MySQL安装目录下的share/mysqld目录下或可以在MySQL源代码分发的support_files目录下找到。对于rpm分发,该脚本已经改名mysql位于/etc/rc.d/init.d目录中,另外在….中存在一个副本mysql.server。下文的讨论对RPM分发来说,都在安装中完成了。如果你想使用它们,你需要将它们拷贝到适当的目录下。2、如何使用mysql.server脚本启动停止服务器mysql.server脚本可以被用来启动或停止服务器,通过用start或stop参数调用它:$mysql.serverstart$mysql.serverstop3、mysql.server的功能简述在mysql.server启动服务器之前,它把目录改变到MySQL安装目录,然后调用safe_mysqld。如果你有在一个非标准的地点安装的二进制分发,你可能需要编辑mysql.server。修改它,运行safe_mysqld前,cd到正确的目录。4、让mysql.server以特定的用户启动服务器如果你想要作为一些特定的用户运行服务器,你可以改变mysql_daemon_user=root行使用其他用户,你也能修改mysql.server把其他选项传给safe_mysqld。当然你也可以利用选项文件给mysql.server脚本提供参数。你也可以在一个全局“/etc/my.cnf”文件中增加mysql.server的选项。一个典型的“/etc/my.cnf”文件可能看起来像这样:[mysqld]datadir=/usr/local/mysql/varsocket=/tmp/mysqld.sockport=3306[mysql.server]user=mysqlbasedir=/usr/local/mysqlmysql.server脚本使用下列变量:user、datadir、basedir、bindir和pid-file。5、利用mysql.server脚本让服务器自动启动mysql.server脚本的重要性在于你可以使用它配置一个随操作系统自动启动的数据库安装,这是一个实际的系统中常用的方法。把mysql.server复制到/etc/rc.d/init.d目录里面:#cd/etc/rc.d/init.d#cp/usr/local/mysql/support-files/mysql.servermysql接着把它的属性改为“x”(executable,可执行)#chmod+xmysql最后,运行chkconfig把MySQL添加到你系统的启动服务组里面去。#/sbin/chkconfig--delmysql#/sbin/chkconfig--addmysql你也可以这样做,手工建立链接:#cd/etc/rc.d/rc3.d(根据你的运行级不同而不同,可以是rc5.d)#ln–s../init.d/mysqlS99mysql在系统启动期间,S99mysql脚本利用start参数自动启动。3.1.3使用mysqladmin实用程序关闭、重启数据库日常维护数据库,经常需要关闭或者重新启动数据库服务器。mysql.serverstop只能用于关闭数据库系统,并不方便,而且mysql.server脚本用特定用户身份启动服务器,因此使用该教本需要超级用户的权限。相比之下mysqladmin就方便的多,并且适用于MySQL所有类型、平台的安装。关闭数据库服务器mysqladminshutdown重启数据库服务器mysqladminreload获得帮助mysqladmin–helpmysqladmin实用程序非常有使用价值,仔细阅读帮助输出,你会得到更多的用法。如果出现下面的错误:mysqladmin:connecttoserverat'localhost'failederror:'Accessdeniedforuser:'root@localhost'(Usingpassword:YES)'表示你需要一个可以正常连接的用户,请指定-u-p选项,具体方法与3.2节介绍相同,在第七章中你将会学到用户授权的知识。例如,你现在可以:shellmysqladmin-uroot-pshutdownEnterPassword:***********输入你在阅读第二章时修改过的密码即可。3.1.4启动或停止NT平台上的系统服务上面几节介绍了Unix平台上使数据库服务器自动启动的方法,而在windows(NT)平台上为了让MySQL数据库自动启动,你需要将MySQL服务器安装成NT系统的一种服务。1、将MySQL安装成系统服务对于NT,服务器名字是mysqld-nt。C:\mysql\binmysqld-nt--install(你可以在NT上使用mysqld或mysqld-opt服务器,但是那些不能作为一种服务启动或使用命名管道。)2、修改选项文件如果你的mysql没有安装缺省的位置c:\mysql,那么因为数据库将无法确定数据库目录的位置,而无法启动。这种情况下,你需要提供一个全局的选项文件c:\my.cnf。将安装目录中的my-example.cnf文件拷贝到c盘根目录下。修改或加入:[mysqld]basedir=x:/path/to/mysql/3、启动、停止服务器的方法你可以用下列命令启动和停止MySQL服务:NETSTARTmysqlNETSTOPmysql注意在这种情况下,你不能对mysqld-nt使用任何其他选项!你需要使用选项文件提供参数。可以在选项文件中提供合适的参数。3.1.5使用选项文件提供服务器的参数本节介绍守护程序需要的比较重要的选项。对于全局选项文件(windows:c:/my.cnf或者unix:/etc/my.cnf),比较重要的选项有:user运行守护程序的用户,如果你使用mysql.server,并且在[mysql.server]中指定了user,那么这个选项没有必要。log-update