目录
本章简要概述了MySQL AB提供的命令行程序,并讨论了运行这些程序时如何指定选项。大多数程序具有其操作专用的选项,但指定选项的语法都近似。后面的几章更加详细地描述了各个程序,包括它们识别的选项ã€�
MySQL AB还提供了3ä¸�GUI客户程序ä¾�MySQL服务器使用:
· MySQL管理å™�:该工具用于管理MySQL服务器、数据库、表以及用户ã€�
· MySQL查询浏览å™�:该图形工具ç”�MySQL AB提供,用于创建、执行以及优化对MySQL数据库的查询ã€�
· MySQL移植工具åŒ�:该工具可以帮助你将计划和数据从其它关系数据库管理系统移植到MySQLã€�
MySQL AB提供了几种类型的程序ï¼�
· MYSQL服务器和服务器启动脚本:
o mysqldæ˜�MySQL服务å™�
o mysqld_safeã€�mysql.serverå’�mysqld_multi是服务器启动脚本
o mysql_install_db初始化数据目录和初始数据åº�
· 访问服务器的客户程序ï¼�
o mysql是一个命令行客户程序,用于交互式或以批处理模式执è¡�SQL语句ã€�
o mysqladmin是用于管理功能的客户程序ã€�
o mysqlcheck执行表维护操作ã€�
o mysqldumpå’�mysqlhotcopy负责数据库备份ã€�
o mysqlimport导入数据文件ã€�
o mysqlshow显示信息数据库和表的相关信息ã€�
åœ�ç¬�8章:客户端和实用工具程序中详细讨论了这些程序ã€�
· 独立于服务器操作的工具程序:
o myisamchk执行表维护操作ã€�
o myisampack产生压缩、只读的表ã€�
o mysqlbinlog是处理二进制日志文件的实用工具ã€�
o perror显示错误代码的含义ã€�
åœ�ç¬�5章:数据库管ç��中详细讨论了myisamchk。在ç¬�8章:客户端和实用工具程序中详细讨论了其它程序ã€�
大多æ•�MySQL分发包括上述的全部程序,只是不包含那些与平台相关的程序ã€�(例如,在Windows中不使用服务器启动脚本)ã€�不同的只æ˜�RPM分发更加具体化。可能一ä¸�RPM是服务器分发,另一ä¸�RPM是客户程序分发等等。如果你丢失了一个或多个程序,要想查阅关于分发类型和它们所包含内容的信息,参见ç¬�2章:安装MySQL。也可能需要安装一些其它内容ã€�
要想从命令行调用MySQL程序(即从shell或命令提ç¤�),应输入程序名,并随后输入指导操作发的选项或其它参量。下面的命令显示了一些程序调用的例子。â€�shell>”表示命令解释符提示;并不是输入的部分。你所看见的具体提示取决于命令解释符。典型提示符ï¼�shæˆ�bashä¸�$ï¼�cshæˆ�tcshä¸�%ï¼�Windows command.comæˆ�cmd.exeä¸�C:\>ã€�
shell> mysql test
shell> mysqladmin extended-status variables
shell> mysqlshow --help
shell> mysqldump --user=root personnel
以破折号开始的参数为选项参量。它们通常指定程序与服务器的连接类型或影响其操作模式。关于选项语法的描述参è§�4.3节,“指定程序选项â€�ã€�
非选项参数(不以破折号开始的参量)可以为程序提供更详细的信息。例如,mysql程序将第一个非选项参量解释为数据库名,因此命令 mysql test表示你想要使ç”�test数据库ã€�
后面的章节描述了具体的程序,表示程序可以理解的选项,并描述了其它非选项参量的含义ã€�
部分选项对部分程序是通用的。最常用的是指定连接参数çš�--hostã€�--userå’�--password选项。它们指ç¤�MySQL服务器运行的主机å’�MySQL账户的用户名å’� 密码。所æœ�MySQL客户程序可以理解这些选项;它们允许你指定连接哪个服务器,以及在该服务器上使用çš� 账户ã€�
你也许会发现需要使ç”�MySQL程序安装çš�bin目录的路径名来调ç”�MySQL程序。如果你试图不在bin目录下运è¡�MySQL程序,可能会遇到â€�程序未找åˆ�”错误。为了更方便地使ç”�MySQL,可以将bin目录的路径名添加åˆ�PATH环境变量中。然后运行程序时只需要输入程序名,而不需要输入整个路径名ã€�
关于设置PATH的指令的命令解释符请查阅相关文档。设置环境变量的语法与解释符有关ã€�
可以用几种方式提ä¾�MySQL程序的选项ï¼�
· 在命令行中在程序名后面提供。这对于具体程序调用时使用的选项很普遍ã€�
· 在程序启动时读取的选项文件中设置。这对于每次程序运行时使用的选项很普遍ã€�
· 在环境变量中设置。这对每次程序运行时所使用的选项很有用,尽管实际上最常用选项文件ã€�(5.12.2节,“在Unix中运行多个服务器â€�中讨论了环境变量会很有帮助的一种情况。描述了使用这些变量来指定服务器和客户程序的TCP/IP端口号和Unix套接字文件的各种技术)ã€�
MySQL程序首先检查环境变量,然后检查选项文件,然后检查命令行来确定给出了哪些选项。如果多次指定一个选项,最后出现的选项占先。这说明环境变量具有最低的优先级,命令行选项具有最高优先级ã€�
可以在选项文件中指定程序选项的默认值来è®�MySQL程序处理各选项。不需要在每次运行程序时输入选项,但可以根据需要通过命令行选项来覆盖默认值ã€�
在命令行中指定的程序选项遵从下述规则ï¼�
· 在命令名后面紧跟选项ã€�
· 选项参量以一个和两个破折号开始,取决于它具有短名还是长名。许多选项有两种形式。例如,-?å’�--help是指å¯�MySQL程序显示帮助消息的选项的短名和长名ã€�
· 选项名对大小写敏感ã€�-vå’�-V均有效,但具有不同的含义ã€�(它们æ˜�--verboseå’�--version选项的短名)ã€�
· 部分选项在选项名后面紧随选项值。例如,-h localhostæˆ�--host=localhost表示客户程序çš�MySQL服务器主机。选项值可以告诉程åº�MySQL服务器运行的主机名ã€�
· 对于带选项值的长选项,通过一个â€�=’将选项名和值隔离开来。对于带选项值的短选项,选项值可以紧随选项字母后面,或者二者之间可以用一个空格隔开ã€�(-hlocalhostå’�-h localhost是等效的ï¼�ã€�该规则的例外情况是指å®�MySQL密码的选项。该选项的形式可以为--password=pass_valæˆ�--password。在后一种情å†�(未给å‡� 密码å€�),程序将提示输入密码。也可以给出密码选项,短形式ä¸�-ppass_valæˆ�-p。然而,对于短形式,如果给出äº� 密码值,必须紧跟在选项后面ï¼�中间不能插入空格。这样要求的原因是如果选项后面有空格,程序没有办法来告知后面的参量æ˜� 密码值还是其它某种参量。因此,下面两个命令的含义完全不同:
· shell> mysql -ptest
· shell> mysql -p test
第一个命令让mysql使用密码test,但没有指定默认数据库。第二个命令è®�mysql提示输入 密码并使ç”�test作为默认数据库ã€�
部分选项控制可以开关的行为。例如,mysql客户端支æŒ�--column-names选项,确定是否在查询结果开头显示一行栏目名。默认情况,该选项被启用。但是可能在某些情况下你想要禁用它,例如å°�mysql的输出发送到另一个只希望看到数据而不希望看到开始的标题行的程序中ã€�
要想禁用列名,可以使用下面的形式来指定选项ï¼�
--disable-column-names
--skip-column-names
--column-names=0
--disableå’�--skip前缀ä¸�=0后缀的效果相同:它们均关闭选项ã€�
可以用下述方法â€�启用”选项ï¼�
--column-names
--enable-column-names
--column-names=1
如果选项有前缀--loose,如果程序未识别出选项不会提示错误退出,但是会发出一条警告:
shell> mysql --loose-no-such-option
mysql: WARNING: unknown option '--no-such-option'
当你从安装了多个MySQL的同一台机器上运行程序时,--loose前缀会很有用。当你在一个选项文件中列出选项时,该前缀会特别有用。有可能不能被程序的所有版本识别的选项可以冠以--loose前缀(或在选项文件中用loose)。不能识别选项的程序版本将会发出一条警告并忽视该选项ã€�
å¯�mysql偶尔有用的另一个选项æ˜�-eæˆ�--execute选项,可用来å°�SQL语句传递给服务器。该语句必须用引号引起来(单引号或双引å��)ã€�(然而,如果想要在查询中将值引起来,则对于查询应使用双引号,查询中引用的值应使用单引号)ã€�当使用该选项时,语句被执行,然后mysql立即退出命令外壳ã€�
例如,你可以用下面的命令获得用户账户列表ï¼�
shell> mysql -u root -p -e "SELECT User, Host FROM User" mysql
Enter password: ******
+------+-----------+
| User | Host |
+------+-----------+
| | gigan |
| root | gigan |
| | localhost |
| jon | localhost |
| root | localhost |
+------+-----------+
shell>
请注æ„�mysql数据库名作为一个独立的参量传递。然而,相同的查询可能已经使ç”�mysql -u root -p -e "SELECT Userï¼�Host FROM mysql.User"从外壳中执行ã€�
可以按这种方式传递多ä¸�SQL语句,用分号隔开ï¼�
shell> mysql -u root -p --execute="SELECT Name FROM Country WHERE Name LIKE 'AU%';SELECT COUNT(*) FROM City" world
Enter password: ******
+-----------+
| Name |
+-----------+
| Australia |
| Austria |
+-----------+
+----------+
| COUNT(*) |
+----------+
| 4079 |
+----------+
请注意长形式(--execute)后面必须紧跟一个等å��(=)ã€�
-e选项也可以以类似方式用来将命令传递给MySQL簇的ndb_mgm管理客户端。相关例子参è§�17.3.6节,“安全关闭和重启â€�ã€�
MySQL程序可以从选项文件(有时也称为配置文ä»�)读取启动选项。选项文件提供了一种很方便的方式来指定常用的选项,因此不需要每次运行程序时从命令行输入ã€�
下面的程序支持选项文件ï¼�myisamchkã€�myisampackã€�mysqlã€�mysql.serverã€�mysqladminã€�mysqlbinlogã€�mysqlccã€�mysqlcheckã€�mysqld_safeã€�mysqldumpã€�mysqldã€�mysqlhotcopyã€�mysqlimportå’�mysqlshowã€�
注释ï¼�MySQL簇程序使用的选项文件参见17.4节,“MySQL簇的配置â€�ã€�
åœ�Windows中,MySQL程序从以下文件读取启动选项ï¼�
|
文件å�� |
目的 |
|
WINDIR\my.ini |
全局选项 |
|
C:\my.cnf |
全局选项 |
|
INSTALLDIR\my.ini |
全局选项 |
|
defaults-extra-file |
ç”�--defaults-extra-file=path指定的文件,如果æœ� |
WINDIR表示Windows目录的位置。通常ä¸�C:\WINDOWSæˆ�C:\WINNT。你可以使用下面的命令通过环境变量WINDIR的值确定其确切位置ï¼�
C:\> echo %WINDIR%
INSTALLDIR表示MySQL的安装目录。一般为C:\PROGRAMDIR\MySQL\MySQL 5.1 Server,其ä¸�PROGRAMDIR表示程序目录(通常ä¸�Windows英文版的Program Files)ï¼�MySQL 5.1的安装是根据安装和配置向导完成的。参è§�2.3.5.14节,“my.ini文件的位置â€�ã€�
åœ�Unix中,MySQL程序从下面的文件读取启动选项ï¼�
|
文件å�� |
目的 |
|
/etc/my.cnf |
全局选项 |
|
$MYSQL_HOME/my.cnf |
服务器相关选项 |
|
defaults-extra-file |
ç”�--defaults-extra-file=path指定的文件,如果æœ� |
|
~/.my.cnf |
用户相关选项 |
MYSQL_HOME是一个环境变量,包含服务器相关的my.cnf文件驻留的目录路径ã€�
如果未设ç½�MYSQL_HOME,并ä¸�DATADIR中有一ä¸�my.cnf文件ï¼�BASEDIR中没æœ�my.cnf文件ï¼�mysqld_safeå°�MYSQL_HOME设置ä¸�DATADIR。否则,如果未设ç½�MYSQL_HOME并且åœ�DATADIR中没æœ�my.cnf,则mysqld_safeå°�MYSQL_HOME设置ä¸�BASEDIRã€�
典型情况二进制安装的目录ä¸�/usr/local/mysql/data或源代码安装的目录为/usr/local/var。请注意这是配置时指定的数据目录的位置,而不æ˜� mysqld启动时用--datadir指定的。运行时使用--datadir对寻找选项文件的服务器没有效果,因为服务器在处理命令行参量之前寻找这些选项ã€�
MySQL按照上述顺序寻找选项文件,并读存在的选项文件。如果你想要使用的某个选项文件不存在,则用明文文本编辑器创建。如果存在多个选项文件,文件中指定的后读取的选项要优先文件中指定的先读取的选项ã€�
注释ï¼�åœ�Unix平台上,MySQL忽略人人可写的配置文件。这是故意的,是一个安全措施ã€�
任何可以在运è¡�MySQL程序时在命令行给出的长选项也可以在选项文件中给出。要想列出程序的适用选项,用--help选项运行程序ã€�
在选项文件中指定选项的语法类似于命令行语法,例外的是要忽略掉两个破折号。例如,命令行中çš�--quickæˆ�--host=localhost在选项文件中应指定ä¸�quickæˆ�host=localhost。要想在选项文件中指å®�--loose-opt_name形式的选项,应写为loose-opt_nameã€�
选项文件中的空行被忽略掉。非空行可以采用下面任何形式ï¼�
· #注释ï¼�ï¼�注释
注释行以â€�#’或â€�ï¼�’开头。â€�#’注释也可以从行的中部开始ã€�
· [group]
group是你想要设置选项的程序名或组名。在组行后面,任ä½�opt_nameæˆ�set-variable行适用于组名,直到选项文件结尾或给出其它组行ã€�
· opt_name
等价于命令行中的--opt_nameã€�
· opt_name=value
等价于命令行中的--opt_name=value。在选项文件中,â€�=’字符附近可以有空格,而在命令行中是不允许的。你可以用单引号或双引号来引用值。如果值包含一个â€�#’注释字符或空格时很有用ã€�
选项名和值前后的空白将自动删除掉。你可以在选项值中使用转义序列â€�\b’、â€�\t’、â€�\n’、â€�\r’、â€�\\’以及â€�\s’来表示退格ã€�tab、换行符、回车以及空格字符ã€�
åœ�Windows中,如果某个选项值表示一个路径名,应使用â€�/’而不是â€�\’作为路径名间隔符来指定值。如果使用â€�\’,必须用双斜线â€�\\’,因为â€�\’在MySQL中为转义字符ã€�
如果选项组名与程序名相同,则组内的选项专用于该程序ã€�
所有客户程åº�(ä½�不能è¢�mysqld)读取[client]选项组。这样允许你指定适用于所有客户端的选项。例如,[client]是用于指定连接服务器çš� 密码的理想的组ã€�(但应确保该选项文件只能由你自己读写,以便其他人不能发现你的密码ï¼�ã€�一定不要随意在[client]组内放置选项,除非它可以被你使用的所有客户程序识别。如果你试图运行程序,如果程序不理解选项则会显示一条错误消息后退出ã€�
ä»�5.0系列çš�MySQL 5.0.4开始,可以在选项文件中使ç”�!include指令来包括具体文件和!includedir来搜索选项文件的具体目录。例如,要包括文ä»�/home/mydir/myopt.cnf,可以使用:
!include /home/me/myopt.cnf
要搜索所有以.cnf结尾的文件的目录/home/mydir并作为选项文件读取,应使用ï¼�
!includedir /home/mydir
请注意这些选项与节有关。例如,假定你想要使ç”�my.cnf中的某些内容,如下所示:
[mysqld]
!include /home/mydir/myopt.cnf
在这种情况下,只为该服务器处理文ä»�myopt.cnf,并ä¸�!include指令将被客户应用程序忽略。然而,如果你使用下面的部分ï¼�
[mysqldump]
!includedir /home/mydir/my-dump-option
则只æœ�mysqldump为以.cnf结尾的文件检查目å½�/home/mydir/my-dump-option,服务器或其它客户应用程序均不检查ã€�
注释ï¼�目前,在Unix操作系统中,所发现的使ç”�!includedir指令包括的文件的文件å��必须ä»�.cnf为扩展名。在Windows中,该指令也为有.ini扩展å��(包括.cnf)的文件做检查ã€�
如果你想要创建只由一个具ä½�mysqld服务器发布系列读取的选项组,选项组可以用[mysqld-5.0]ã€�[mysqld-5.1]等名称。下面的组表ç¤�--new选项只能用于5.1.x 版本çš�MySQL服务器:
[mysqld-5.1]
new
下面是一个典型的全局选项文件ï¼�
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M
[mysqldump]
quick
在上述的选项文件中,设置key_buffer_sizeå’�max_allowed_packet变量的行使用äº�var_name=value语法ã€�
下面是一个典型的用户选项文件ï¼�
[client]
# The following password will be sent to all standard MySQL clients
password="my_password"
[mysql]
no-auto-rehash
connect_timeout=2
[mysqlhotcopy]
interactive-timeout
如果你有一个源代码分发,可以从support-file目录中找到名ä¸�my-xxxx.cnf的示例选项文件。如果你有一个二进制分发,在MySQL安装目录çš�support-file目录中查找。在Windows中,示例选项文件也可以位äº�MySQL的安装目å½�(如果你不知道在哪里,查阅本节前面æˆ�ç¬�2章:安装MySQL)。目前有小、中等、大以及非常大的系统的示例选项文件。要想练习这些文件,åœ�Windows中复制到C:\my.cnf或在Unix中复制到根目录的.my.cnfã€�
注释ï¼�åœ�Windows中,可以不显ç¤�.cnf选项文件的扩展名ã€�
所有支持选项文件çš�MySQL程序可以处理下面的命令行选项ï¼�
· --no-defaults
不读取任何选项文件ã€�
· --print-defaults
打印从选项文件中获得的程序名和所有选项ã€�
· --defaults-file=path_name
只使用给出的选项文件ã€�path_name是文件的全路径名ã€�
· --defaults-extra-file=path_name
在全局选项文件后但在用户选项文件前读该选项文件ã€�path_name是文件的全路径名ã€�
为了正确工作,每个选项必须紧随命令行中的命令名后,例外情况æ˜�--print-defaults可以紧随--defaults-fileæˆ�--defaults-extra-fileã€�
åœ�shell脚本中,可以使用my_print_defaults程序来分析选项文件。下面的例子显示了当要求显示[client]å’�[mysql]组内发现的选项æ—�my_print_defaults产生的输出:
shell> my_print_defaults client mysql
--port=3306
--socket=/tmp/mysql.sock
--no-auto-rehash
开发人员请注意:在C客户程序库中,只是通过处理命令行参量前面的所有匹配选项(即相应组内的选项)来处理选项文件。对于使用多次指定的最后的选项实例的程序,可以很好地工作。如果你有一ä¸�Cæˆ�C++程序按这种方式处理多次指定的选项,但不读取选项文件,只需要添加两行来实现该功能。检查标å‡�MySQL客户程序的源代码来看看如何做ã€�
其它几个MySQL语言接口基于C客户库,它们中的一部分提供了访问选项文件的一种方式。包æ‹�Perlå’�Python。关于接口的详细信息参见相关文档ã€�
要想用环境变量指定选项,使用适用注释处理器的语法来设置变量。例如,åœ�Windowsæˆ�NetWare中,可以设置USER变量来指å®�MySQL账户名。要想实现,使用语法ï¼�
SET USER=your_name
åœ�Unix中的语法取决于你的外壳。假定你想要使用MYSQL_TCP_PORT变量指定TCP/IP端口号。典型的语法ä¸�(例如shã€�bashã€�zsh等等)ï¼�
MYSQL_TCP_PORT=3306
export MYSQL_TCP_PORT
ç¬�1个命令设置变量,export命令将变量导出到外壳环境,以便其值可ä¾�MySQL和其它进程访问ã€�
cshå’�tcsh有类似的问题。运行这些外壳时,使ç”�setenv使外壳变量适用环境ï¼�
setenv MYSQL_TCP_PORT 3306
可以在命令提示符下执行设置环境变量的命令,以便立即生效。这些设定值持续到你注销。要向让这些设定值在你每次登录时生效,将相应命令放入每次启动时命令解释符所读的启动文件中。在Windows中典型启动文件为AUTOEXEC.BATï¼�bashä¸�.bash_profile,或è€�tcshä¸�.tcshrc。关于命令解释符的具体细节请查阅文档ã€�
许多MySQL程序有一些内部变量可以在运行时设置。程序变量的设置与带有值的其它长选项相同。例如,mysql有一ä¸�max_allowed_packet变量,可以控制其通信缓冲区的最大长度。要想为mysqlå°�max_allowed_packet变量的值设置为16MB,使用下面的任何一个命令:
shell> mysql --max_allowed_packet=16777216
shell> mysql --max_allowed_packet=16M
ç¬�1个命令以字节指定值。第2个命令以兆字节指定值。变量值可以有一个后缀Kã€�M或è€�G(可以为大写或小写)来表示千字节、兆字节或者十亿字节的单位ã€�
在选项文件中,变量设定值没有引导破折号ï¼�
[mysql]
max_allowed_packet=16777216
或:
[mysql]
max_allowed_packet=16M
如果你喜欢,变量名的下划线可以为破折号ã€�
注释ï¼�MySQL 5.1仍然能识别旧的语æ³�--set-variable = option=value,但现在不赞成使用ã€�
部分服务器变量可以在运行时设置。详情参è§�5.3.3.1节,“动态系统变量â€�ã€�
这是MySQL参考手册的翻译版本,关于MySQL参考手册,请访é—�dev.mysql.com.。原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的ã€�