MySQL中文参考手册---12 MySQL实用程序

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 13:51:24

12.1 各种MySQL程序概述

所有使用mysqlclient客户库与服务器通信的MySQL客户使用下列环境变量:

名字 说明
MYSQL_UNIX_PORT 缺省套接字;用于连接localhost
MYSQL_TCP_PORT 缺省 TCP/IP 端口
MYSQL_PWD 缺省口令
MYSQL_DEBUG 调试时调试-踪迹选项
TMPDIR 临时表/文件被创建的目录

使用MYSQL_PWD是不安全的。见6.3 与MySQL服务器连接

“mysql”客户使用MYSQL_HISTFILE环境变量中命名的文件来保存命令行历史,历史文件的缺省值是“$HOME/.mysql_history”,这里$HOME是HOME环境变量的值。

所有MySQL程序取许多不同的选项,然而,每个MySQL程序提供一个--help选项,你可以使用它得到程序不同选项的完整描述。例如,试一试mysql --help。

你能用一个选项文件覆盖所有的标准客户程序的缺省选项。见4.15.4 选择文件

下表简单地描述MySQL程序:

myisamchk
描述、检查、优化和修复MySQL表的使用程序。因为myisamchk有许多功能,它在其自己的章节中描述。见13 维护MySQL安装
make_binary_release
制作一个编译MySQL的一个二进制的版本。这能用FTP传送到在ftp.tcx.se网站的“/pub/mysql/Incoming”以方便其它MySQL用户。
msql2mysql
一个外壳脚本,转换mSQL程序到MySQL。它不能处理所有的情况,但是当转换时,它给出一个好起点。
mysql
mysql是一个简单的SQL外壳(具有GNU readline 能力),它支持交互式和非交互式使用。当交互地使用时,查询结果以ASCII表的格式被表示。当非交互地使用时(例如,作为一个过滤器),结果是以定位符分隔的格式表示。(输出格式可以使用命令行选项改变)你可以简单地象这样运行脚本:
shell> mysql database < script.sql > output.tab

如果你在客户中由于内存不足造成问题,使用--quick选项!这迫使mysql使用mysql_use_result()而非mysql_store_result()来检索结果集合。

mysqlaccess
一个脚本,检查对主机、用户和数据库组合的存取权限。
mysqladmin
执行管理操作的实用程序,例如创建或抛弃数据库,再装载授权表,清洗表到磁盘中和再打开日志文件。mysqladmin也可以被用来从服务器检索版本,进程和状态信息。见12.2 管理一个 MySQL 服务器
mysqlbug
MySQL错误报告脚本。当填写一份错误报告到MySQL邮件列表时,应该总是使用该脚本。
mysqld
SQL守护进程。它应该一直在运行。
mysqldump
以SQL语句或定位符分隔的文本文件将一个MySQL数据库倾倒一个文件中。这是最早由Igor Romanenko编写的自由软件的增强版本。见12.3 从MySQL数据库和表倾倒结构和数据
mysqlimport
使用LOAD DATA INFILE将文本文件倒入其各自的表中。见12.4 从文本文件导入数据
mysqlshow
显示数据库,表,列和索引的信息。
mysql_install_db
以缺省权限创建MySQL授权表。这通常仅被执行一次。就是在系统上第一次安装MySQL时。
replace
一个实用程序,由msql2mysql使用,但是有更一般的适用性。replace改变文件中或标准输入上的字符串。使用一台有限状态机首先匹配更长的字符串,能被用来交换字符串。例如,这个命令在给定的文件中交换a和b:
shell> replace a b b a -- file1 file2 ...
safe_mysqld
一个脚本,用某些更安全的特征启动mysqld守护进程,例如当一个错误发生时,重启服务器并且记载运行时刻信息到一个日志文件中。

12.2 管理一个MySQL服务器

用于执行管理性操作。语法是:

shell> mysqladmin [OPTIONS] command [command-option] command ...

通过执行mysqladmin --help,你可以得到你mysqladmin的版本所支持的一个选项列表。

目前mysqladmin支持下列命令:

create databasename 创建一个新数据库
drop databasename 删除一个数据库及其所有表
extended-status 给出服务器的一个扩展状态消息
flush-hosts 洗掉所有缓存的主机
flush-logs 洗掉所有日志
flush-tables 洗掉所有表
flush-privileges 再次装载授权表(同reload)
kill id,id,... 杀死mysql线程
password 新口令,将老口令改为新口令
ping 检查mysqld是否活着
processlist 显示服务其中活跃线程列表
reload 重载授权表
refresh 洗掉所有表并关闭和打开日志文件
shutdown 关掉服务器
status 给出服务器的简短状态消息
variables 打印出可用变量
version 得到服务器的版本信息

所有命令可以被缩短为其唯一的前缀。例如:

shell> mysqladmin proc stat+----+-------+-----------+----+-------------+------+-------+------+ Id  User   Host       db  Command      Time  State  Info +----+-------+-----------+----+-------------+------+-------+------+ 6   monty  localhost      Processlist  0                 +----+-------+-----------+----+-------------+------+-------+------+Uptime: 10077  Threads: 1  Questions: 9  Slow queries: 0  Opens: 6  Flush tables: 1  Open tables: 2  Memory in use: 1092K  Max memory used: 1116K

mysqladmin status命令结果有下述列:

Uptime MySQL服务器已经运行的秒数
Threads 活跃线程(客户)的数量
Questions 从mysqld启动起来自客户问题的数量
Slow queries 已经超过long_query_time秒的查询数量
Opens mysqld已经打开了多少表
Flush tables flush ..., refresh和reload命令数量
Open tables 现在被打开的表数量
Memory in use 由mysqld代码直接分配的内存(只有在MySQL用--with-debug编译时可用)
Max memory used 由mysqld代码直接分配的最大内存(只有在MySQL用--with-debug编译时可用)

12.3 从MySQL数据库和表中倒出结构和数据

实用程序,为备份或为把数据转移到另外的SQL服务器上倾倒一个数据库或许多数据库。倾倒将包含 创建表或充实表的SQL语句。

shell> mysqldump [OPTIONS] database [tables]

如果你不给定任何表,整个数据库将被倾倒。

通过执行mysqldump --help,你能得到你mysqldump的版本支持的选项表。

注意,如果你运行mysqldump没有--quick或--opt选项,mysqldump将在倾倒结果前装载整个结果集到内存中,如果你正在倾倒一个大的数据库,这将可能是一个问题。

mysqldump支持下列选项:

--add-locks
在每个表倾倒之前增加LOCK TABLES并且之后UNLOCK TABLE。(为了使得更快地插入到MySQL)。
--add-drop-table
在每个create语句之前增加一个drop table。
--allow-keywords
允许创建是关键词的列名字。这由表名前缀于每个列名做到。
-c, --complete-insert
使用完整的insert语句(用列名字)。
-C, --compress
如果客户和服务器均支持压缩,压缩两者间所有的信息。
--delayed
用INSERT DELAYED命令插入行。
-e, --extended-insert
使用全新多行INSERT语法。(给出更紧缩并且更快的插入语句)
-#, --debug[=option_string]
跟踪程序的使用(为了调试)。
--help
显示一条帮助消息并且退出。
--fields-terminated-by=...
 
--fields-enclosed-by=...
 
--fields-optionally-enclosed-by=...
 
--fields-escaped-by=...
 
--fields-terminated-by=...
这些选择与-T选择一起使用,并且有相应的LOAD DATA INFILE子句相同的含义。见7.16 LOAD DATA INFILE语法
-F, --flush-logs
在开始倾倒前,洗掉在MySQL服务器中的日志文件。
-f, --force,
即使我们在一个表倾倒期间得到一个SQL错误,继续。
-h, --host=..
从命名的主机上的MySQL服务器倾倒数据。缺省主机是localhost。
-l, --lock-tables.
为开始倾倒锁定所有表。
-t, --no-create-info
不写入表创建信息(CREATE TABLE语句)
-d, --no-data
不写入表的任何行信息。如果你只想得到一个表的结构的倾倒,这是很有用的!
--opt
同--quick --add-drop-table --add-locks --extended-insert --lock-tables。应该给你为读入一个MySQL服务器的尽可能最快的倾倒。
-pyour_pass, --password[=your_pass]
与服务器连接时使用的口令。如果你不指定“=your_pass”部分,mysqldump需要来自终端的口令。
-P port_num, --port=port_num
与一台主机连接时使用的TCP/IP端口号。(这用于连接到localhost以外的主机,因为它使用 Unix套接字。)
-q, --quick
不缓冲查询,直接倾倒至stdout;使用mysql_use_result()做它。
-S /path/to/socket, --socket=/path/to/socket
与localhost连接时(它是缺省主机)使用的套接字文件。
-T, --tab=path-to-some-directory
对于每个给定的表,创建一个table_name.sql文件,它包含SQL CREATE 命令,和一个table_name.txt文件,它包含数据。 注意:这只有在mysqldump运行在mysqld守护进程运行的同一台机器上的时候才工作。.txt文件的格式根据--fields-xxx和--lines--xxx选项来定。
-u user_name, --user=user_name
与服务器连接时,MySQL使用的用户名。缺省值是你的Unix登录名。
-O var=option, --set-variable var=option
设置一个变量的值。可能的变量被列在下面。
-v, --verbose
冗长模式。打印出程序所做的更多的信息。
-V, --version
打印版本信息并且退出。
-w, --where='where-condition'
只倾倒被选择了的记录;注意引号是强制的!
"--where=user='jimf'" "-wuserid>1" "-wuserid<1"

最常见的mysqldump使用可能制作整个数据库的一个备份:

mysqldump --opt database > backup-file.sql 

但是它对用来自于一个数据库的信息充实另外一个MySQL数据库也是有用的:

mysqldump --opt database  mysql --host=remote-host -C database

12.4 从文本文件导入数据

mysqlimport提供一个到LOAD DATA INFILESQL语句的命令行接口。mysqlimport的大多数选项直接对应于LOAD DATA INFILE的相同选项。见7.16 LOAD DATA INFILE语法

mysqlimport象这样调用:

shell> mysqlimport [options] filename ...

对于在命令行上命名的每个文本文件,mysqlimport剥去文件名的扩展名并且使用它决定哪个表导入文件的内容。例如,名为“patient.txt”、“patient.text”和“patient”将全部被导入名为patient的一个表中。

mysqlimport支持下列选项:

-C, --compress
如果客户和服务器均支持压缩,压缩两者之间的所有信息。
-#, --debug[=option_string]
跟踪程序的使用(为调试)。
-d, --delete
在导入文本文件前倒空表格。
--fields-terminated-by=...
 
--fields-enclosed-by=...
 
--fields-optionally-enclosed-by=...
 
--fields-escaped-by=...
 
--fields-terminated-by=...
这些选项与对应于LOAD DATA INFILE的子句相同的含义。见7.16 LOAD DATA INFILE语法
-f, --force
忽略错误。例如,如果对于一个文本文件的一个表不存在,继续处理任何余下的文件。没有--force,如果表不存在,mysqlimport退出。
--help
显示一条帮助消息并且退出。
-h host_name, --host=host_name
导入数据到命名的主机上的MySQL服务器。缺省主机是localhost。
-i, --ignore
见为--replace选项的描述。
-l, --lock-tables
在处理任何文本文件前为写入所定所有的表。这保证所有的表在服务器上被同步。
-L, --local
从客户读取输入文件。缺省地,如果你连接localhost(它是缺省主机),文本文件被假定在服务器上。
-pyour_pass, --password[=your_pass]
与服务器连接时使用的口令。如果你不指定“=your_pass”部分,mysqlimport要求来自终端的口令。
-P port_num, --port=port_num
与一台主机连接时使用的TCP/IP端口号。(这被用于连接到除localhost以外的主机,因为它使用Unix套接字。)
-r, --replace
--replace和--ignore选项控制对输入在唯一键值上有重复的现有记录的输入处理。如果你指定--replace,新行将代替有相同唯一键的存在的行。如果你指定--ignore,跳过输入在唯一键值上有重复的现有记录。如果你不指定任何一个选项,当找到一个重复的键值,出现一个错误,并且文本文件余下部分被忽略。
-s, --silent
安静模式。只有在错误发生时,写出输出。
-S /path/to/socket, --socket=/path/to/socket
与localhost(它是缺省主机)连接时使用的套接字文件。
-u user_name, --user=user_name
MySQL使用的用户名字当与服务者联接时。缺省价值是你的 Unix 登录名字。
-v, --verbose
冗长模式。打印程序所做的更多信息。
-V, --version
打印版本信息并且退出。

以下是使用mysqlimport运行的一个样本:

$ mysql --versionmysql  Ver 9.33 Distrib 3.22.25, for pc-linux-gnu (i686)$ uname -aLinux xxx.com 2.2.5-15 #1 Mon Apr 19 22:21:09 EDT 1999 i586 unknown$ mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test$ eda100     Max Sydow101     Count Dracula.w imptest.txt32q$ od -c imptest.txt0000000   1   0   0  \t   M   a   x       S   y   d   o   w  \n   1   00000020   1  \t   C   o   u   n   t       D   r   a   c   u   l   a  \n0000040$ mysqlimport --local test imptest.txttest.imptest: Records: 2  Deleted: 0  Skipped: 0  Warnings: 0$ mysql -e 'SELECT * FROM imptest' test+------+---------------+ id    n             +------+---------------+  100  Max Sydow       101  Count Dracula +------+---------------+ 

12.5 MySQL压缩只读表生成器

myisampack被用来压缩MyISAM表,而pack_isam被用来压缩ISAM表。由于ISAM表被淘汰,这里我们将只讨论myisampack。

myisampack是当你订购超过10个许可证或扩展的支持时,你得到的一个额外的实用程序。因为这些仅以二进制形式被分发,他们仅在某些平台上可用。

下面我们仅谈论myisampack, 但是每件事情对pack_isam也是持有的。

myisampack通过单独压缩表中的每个列来工作。当表被打开时,需要加压缩的信息被读进内存,这使得在存取单个记录时能得到更好的性能,因为你只需要解压缩一个记录,不是更大的磁盘块,象在 MSDOS上使用Stacker时一样。通常,myisampack压缩数据文件40%-70%。

MySQL使用内存映射(mmap())在压缩表上而如果mmap()的使用不工作,倒回到正常的读/写文件。

当前myisampack有2个限制:

  • 在压缩后,表只能读。
  • myisampack也能压缩BLOB或TEXT列。较老的pack_isam不能做到。

修正这些限制以在我们的TODO表上,但是具有低优先级。

myisampack象这样调用:

shell> myisampack [options] filename ...

每个文件名应该是一个索引(“.MYI”) 文件名。如果你不在数据库目录下,你应该指定文件的路径名。允许省略“.MYI”扩展名。

myisampack支持下列选项:

-b, --backup
制作表的一个备份,为tbl_name.OLD。
-#, --debug=debug_options
输出调试日志。debug_options串经常是'd:t:o,filename'。
-f, --force
即使它变得更大或如果临时文件存在,强制表的压缩。(myisampack在压缩表时创建一个名位“tbl_name.TMD”的临时文件。如果你杀死myisampack,“.TMD”文件不能被删除。通常,如果myisampack发现“tbl_name.TMD”存在,它以一个错误退出。用--force,myisampack不管怎样都压缩表。
-?, --help
显示一条帮助消息并且退出。
-j big_tbl_name, --join=big_tbl_name
联结所有在命令行上被命名的表到一个单独的表big_tbl_name中。所有要被合并的表必须是相同的(同样的列名字和类型,同样的索引,等等。)
-p #, --packlength=#
指定记录长度存储尺寸,按字节。值应该是1、2或3。(myisampack用1、2或3字节的长度指针存储所有行。在最一般的情况下,myisampack在它开始包装文件以前,能确定正确的长度值,但是它可能注意到在包装过程期间,它能使用了更短的长度。在这种情况下,myisampack在下一次你包装同样文件时间打印出一条提示,你可以使用更短的记录长度。)
-s, --silent
安静模式。只有当错误发生时,写出输出。
-t, --test
不压缩表,仅仅测试压缩它。
-T dir_name, --tmp_dir=dir_name
使用命名的目录作为写入临时表的位置。
-v, --verbose
冗长模式。写出有关进展和包装结果的信息。
-V, --version
显示版本信息和出口。
-w, --wait
如果表正在使用,等待并且再试。如果mysqld服务器以--skip-locking选项被调用,如果表可能在包装过程中被更新,调用myisampack不是一个好主意。

下面显示的命令顺序说明了一个典型的表压缩桌子压缩过程:

shell> ls -l station.*-rw-rw-r--   1 monty    my         994128 Apr 17 19:00 station.MYD-rw-rw-r--   1 monty    my          53248 Apr 17 19:00 station.MYI-rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frmshell> myisamchk -dvv stationMyISAM file:     stationIsam-version:  2Creation time: 1996-03-13 10:08:58Recover time:  1997-02-02  3:06:43Data records:              1192  Deleted blocks:              0Datafile: Parts:           1192  Deleted data:                0Datafile pointer (bytes):     2  Keyfile pointer (bytes):     2Max datafile length:   54657023  Max keyfile length:   33554431Recordlength:               834Record format: Fixed lengthtable description:Key Start Len Index   Type                       Root  Blocksize    Rec/key1   2     4   unique  unsigned long              1024       1024          12   32    30  multip. text                      10240       1024          1Field Start Length Type1     1     12     2     43     6     44     10    15     11    206     31    17     32    308     62    359     97    3510    132   3511    167   412    171   1613    187   3514    222   415    226   1616    242   2017    262   2018    282   2019    302   3020    332   421    336   422    340   123    341   824    349   825    357   826    365   227    367   228    369   429    373   430    377   131    378   232    380   833    388   434    392   435    396   436    400   437    404   138    405   439    409   440    413   441    417   442    421   443    425   444    429   2045    449   3046    479   147    480   148    481   7949    560   7950    639   7951    718   7952    797   853    805   154    806   155    807   2056    827   457    831   4shell> myisampack station.MYICompressing station.MYI: (1192 records)- Calculating statisticsnormal:     20  empty-space:      16  empty-zero:        12  empty-fill:  11pre-space:   0  end-space:        12  table-lookups:      5  zero:         7Original trees:  57  After join: 17- Compressing file87.14%shell> ls -l station.*-rw-rw-r--   1 monty    my         127874 Apr 17 19:00 station.MYD-rw-rw-r--   1 monty    my          55296 Apr 17 19:04 station.MYI-rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frmshell> myisamchk -dvv stationMyISAM file:     stationIsam-version:  2Creation time: 1996-03-13 10:08:58Recover time:  1997-04-17 19:04:26Data records:              1192  Deleted blocks:              0Datafile: Parts:           1192  Deleted data:                0Datafilepointer (bytes):      3  Keyfile pointer (bytes):     1Max datafile length:   16777215  Max keyfile length:     131071Recordlength:               834Record format: Compressedtable description:Key Start Len Index   Type                       Root  Blocksize    Rec/key1   2     4   unique  unsigned long             10240       1024          12   32    30  multip. text                      54272       1024          1Field Start Length Type                         Huff tree  Bits1     1     1      constant                             1     02     2     4      zerofill(1)                          2     93     6     4      no zeros, zerofill(1)                2     94     10    1                                           3     95     11    20     table-lookup                         4     06     31    1                                           3     97     32    30     no endspace, not_always              5     98     62    35     no endspace, not_always, no empty    6     99     97    35     no empty                             7     910    132   35     no endspace, not_always, no empty    6     911    167   4      zerofill(1)                          2     912    171   16     no endspace, not_always, no empty    5     913    187   35     no endspace, not_always, no empty    6     914    222   4      zerofill(1)                          2     915    226   16     no endspace, not_always, no empty    5     916    242   20     no endspace, not_always              8     917    262   20     no endspace, no empty                8     918    282   20     no endspace, no empty                5     919    302   30     no endspace, no empty                6     920    332   4      always zero                          2     921    336   4      always zero                          2     922    340   1                                           3     923    341   8      table-lookup                         9     024    349   8      table-lookup                        10     025    357   8      always zero                          2     926    365   2                                           2     927    367   2      no zeros, zerofill(1)                2     928    369   4      no zeros, zerofill(1)                2     929    373   4      table-lookup                        11     030    377   1                                           3     931    378   2      no zeros, zerofill(1)                2     932    380   8      no zeros                             2     933    388   4      always zero                          2     934    392   4      table-lookup                        12     035    396   4      no zeros, zerofill(1)               13     936    400   4      no zeros, zerofill(1)                2     937    404   1                                           2     938    405   4      no zeros                             2     939    409   4      always zero                          2     940    413   4      no zeros                             2     941    417   4      always zero                          2     942    421   4      no zeros                             2     943    425   4      always zero                          2     944    429   20     no empty                             3     945    449   30     no empty                             3     946    479   1                                          14     447    480   1                                          14     448    481   79     no endspace, no empty               15     949    560   79     no empty                             2     950    639   79     no empty                             2     951    718   79     no endspace                         16     952    797   8      no empty                             2     953    805   1                                          17     154    806   1                                           3     955    807   20     no empty                             3     956    827   4      no zeros, zerofill(2)                2     957    831   4      no zeros, zerofill(1)                2     9

由myisampack打印的信息在下面描述:

normal
不是用额外压缩的列数。
empty-space
仅包含空格值的列数;这些将占据1位。
empty-zero
只包含二进制0值的列数;这些将占据1位。
empty-fill
不占据其类型全部字节范围的整形列数;这些被改变为一种更小的类型(例如,一个INTEGER列可以被改变为MEDIUMINT)。
pre-space
用前导空间存储的小数的列数。在这种情况下,每个值将包含一个前导空格的数量的计数。
end-space
有很多拖后空格的列数。在这种情况下,每个值将包含一个拖后空格的数量的计数。
table-lookup
列只有少数不同的值,并且它在哈夫曼压缩前被变换一个ENUM。
zero
所有值为零的列数。
Original trees
哈夫曼树的初始数目。
After join
在联结哈夫曼树以节省一些表头空间后余下的不同树的数量。

在一张表被压缩以后,myisamchk -dvv打印出每个字段的额外信息:

Type
字段类型可以包含下列描述符:
constant
所有行有相同的值。
no endspace
不存储尾空格。
no endspace, not_always
不存储尾空格而且不对所有值做尾空格压缩。
no endspace, no empty
不存储尾空格。不存储空值。
table-lookup
列被变换到一个ENUM。
zerofill(n)
值中最高n位总是0并且不被存储。
no zeros
不存储零。
always zero
0值以1位被存储。
Huff tree
与字段相关的哈夫曼树
Bits
在哈夫曼树里使用的位数。

Tags:

作者:佚名
分享到: 微信 更多