目录
有许多不同的MySQL客户端程序可以连接服务器以访问数据库或执行管理任务。也可以使用其它工具。这些程序不与服务器进行通讯但可以执è¡�MySQL相关的操作ã€�
本章简述了这些程序然后详细描述了每个程序。描述了如何调用这些程序和它们理解的选项。调用程序和指定程序选项的总信息参è§�ç¬�4章:MySQL程序概述ã€�
下面简单列出了MySQL客户端程序和实用工具ï¼�
· myisampack
压缩MyISAM表以产生更小的只读表的一个工具。参è§�8.2节,“myisampack:生成压缩、只读MyISAM表â€�ã€�
· mysql
交互式输å…�SQL语句或从文件以批处理模式执行它们的命令行工具。参è§�8.3节,“mysql:MySQL命令行工具â€�ã€�
· mysqlaccess
检查访问主机名、用户名和数据库组合的权限的脚本ã€�
· mysqladmin
执行管理操作的客户程序,例如创建或删除数据库,重载授权表,将表刷新到硬盘上,以及重新打开日志文件ã€�mysqladmin还可以用来检索版本、进程,以及服务器的状态信息。参è§�8.5节,“mysqladmin:用于管理MySQL服务器的客户端â€�ã€�
· mysqlbinlog
从二进制日志读取语句的工具。在二进制日志文件中包含的执行过的语句的日志可用来帮助从崩溃中恢复。参è§�8.6节,“mysqlbinlog:用于处理二进制日志文件的实用工具â€�ã€�
· mysqlcheck
检查、修复、分析以及优化表的表维护客户程序。参è§�8.7节,“mysqlcheck:表维护和维修程序â€�ã€�
· mysqldump
å°�MySQL数据库转储到一个文件(例如SQL语句æˆ�tab分隔符文本文件)的客户程序。增强版免费软件首先ç”�Igor Romanenko提供。参è§�8.8节,“mysqldump:数据库备份程序â€�ã€�
· mysqlhotcopy
当服务器在运行时,快速备ä»�MyISAMæˆ�ISAM表的工具。参è§�8.9节,“mysqlhotcopy:数据库备份程序â€�ã€�
· mysql import
使用LOAD DATA INFILE将文本文件导入相关表的客户程序。参è§�8.10节,“mysqlimport:数据导入程序â€�ã€�
· mysqlshow
显示数据库、表、列以及索引相关信息的客户程序。参è§�8.11节,“mysqlshow:显示数据库、表和列信息â€�ã€�
· perror
显示系统æˆ�MySQL错误代码含义的工具。参è§�8.13节,“perror:解释错误代码â€�ã€�
· replace
更改文件中或标准输入中的字符串的实用工具。参è§�8.14节,“replace:字符串替换实用工具â€�ã€�
MySQL AB还提供了大量GUI工具用于管理å’�MySQL服务器的其它工作。相关基本信息参è§�ç¬�4章:MySQL程序概述ã€�
每个MySQL程序有许多不同的选项。但每个MySQL程序均提供一ä¸�---help选项,可以用来全面描述程序不同的选项。例如,可以试试mysql---helpã€�
使用mysqlclient库同服务器进行通讯çš�MySQL客户使用下面的环境变量:
|
MYSQL_UNIX_PORT |
默认Unix套接字文件;用于连接localhost |
|
MYSQL_TCP_PORT |
默认端口号;用于TCP/IP连接 |
|
MYSQL_PWD |
默认密码 |
|
MYSQL_DEBUG |
调试过程中的调试跟踪选项 |
|
TMPDIR |
创建临时表和文件的目å½� |
使用MYSQL_PWD不安全。参è§�5.8.6节,“使你的密码安全â€�ã€�
可以在选项文件中或在命令行中指定选项来替换所有标准程序的默认选项值或指定的环境变量的值。参è§�4.3节,“指定程序选项â€�ã€�
myisampack工具可以压缩MyISAMè¡�.MYIsampack分别压缩表中的每一列。通常ï¼�myisampack可以将数据文件压缩到40%-70%ã€�
当以后使用表时,解压缩列需要的信息被读入内存。当访问具体的记录时性能会更好,因为你只需要解压缩一个记录ã€�
MySQL使用mmap()对压缩的表进行内存映射。如æž�mmap()不工作,MySQL返回到普通读/写文件操作ã€�
请注意:
· 如果ç”�--skip-external-locking选项调用mysqld服务器,如果在压缩过程中表可能被更新,调ç”�myisampack不是一个好注意ã€�
· 表压缩后,它变为只读。这是故意的(例如当访é—�CD上的压缩的表æ—�)。允许写入到压缩的表位于我们çš�TODO列表中,但优先级较低ã€�
· myisampack可以压缩BLOBæˆ�TEXT列。旧版本ISAM表的pack_isam程序不可以ã€�
调用myisampack的方法:
shell> myisampack [options] filename ...
文件名应为索å¼�(.MYI)文件的文件名。如果不在数据库目录,应指定文件的路径名。允许忽ç•�.MYI扩展名ã€�
myisampack支持下面的选项ï¼�
· --helpï¼�-ï¼�
显示帮助消息并退出ã€�
· --backupï¼�-b
使用tbl_name.OLD名备份表数据文件ã€�
· ---debug[=debug_options]ï¼�-# [debug_options]
写调试日志ã€�debug_options字符串通常ä¸�'d:t:o,file_name'ã€�
· --forceï¼�-f
产生一个压缩的表,即使它比原始表大,或如果以前调用myisampack的中间文件存在ã€�(myisampack压缩表时在数据库目录中创建一个名ä¸�tbl_name.TMD的中间文件。如果杀æŽ�myisampackï¼�.TMD文件会被删除ï¼�ã€�通常情况,如æž�myisampack发现tbl_name.TMD存在则退出并提示错误。用--forceï¼�myisampack则一定压缩表ã€�
· -join=big_tbl_nameï¼�-j big_tbl_name
将命令行中的所有表联接为一个表big_tbl_name。将要连接的所有表必须有相等的结构(相同的列名和类型,相同的索引等等)ã€�
· --pack length=lenï¼�-p len
指定记录长度存储大小,以字节计。值应ä¸�1ã€�2或è€�3ã€�myisampack保存所有长度指针为1ã€�2或è€�3字节的行。在大多数正常情况下ï¼�myisampack在开始压缩文件前可以确定准确的长度值,但在压缩过程中它可以提示它可能已经使用了一个短的长度。在这种情况下,myisampack输出一条提示,下次你压缩同一文件时,你可以使用更短的记录长度ã€�
· --silentï¼�-s
沉默模式。只有发生错误时才写输出ã€�
· --testï¼�-t
没有实际地压缩表,只是测试压缩ã€�
· --tmpdir=pathï¼�-T path
使用myisamchk创建临时文件的目录ã€�
· --verboseï¼�-v
冗长模式。写压缩操作过程相关信息和其结果ã€�
· --versionï¼�-V
显示版本信息并退出ã€�
· --waitï¼�-w
如果表正使用则等待并重试。如果用--skip-external-locking选项调用äº�mysqld服务器,如果在压缩过程中表可能被更新,调ç”�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.frm
shell> myisamchk -dvv station
MyISAM file: station
Isam-version: 2
Creation time: 1996-03-13 10:08:58
Recover time: 1997-02-02 3:06:43
Data records: 1192 Deleted blocks: 0
Datafile parts: 1192 Deleted data: 0
Datafile pointer (bytes): 2 Keyfile pointer (bytes): 2
Max datafile length: 54657023 Max keyfile length: 33554431
Recordlength: 834
Record format: Fixed length
table description:
Key Start Len Index Type Root Blocksize Rec/key
1 2 4 unique unsigned long 1024 1024 1
2 32 30 multip. text 10240 1024 1
Field Start Length Type
1 1 1
2 2 4
3 6 4
4 10 1
5 11 20
6 31 1
7 32 30
8 62 35
9 97 35
10 132 35
11 167 4
12 171 16
13 187 35
14 222 4
15 226 16
16 242 20
17 262 20
18 282 20
19 302 30
20 332 4
21 336 4
22 340 1
23 341 8
24 349 8
25 357 8
26 365 2
27 367 2
28 369 4
29 373 4
30 377 1
31 378 2
32 380 8
33 388 4
34 392 4
35 396 4
36 400 4
37 404 1
38 405 4
39 409 4
40 413 4
41 417 4
42 421 4
43 425 4
44 429 20
45 449 30
46 479 1
47 480 1
48 481 79
49 560 79
50 639 79
51 718 79
52 797 8
53 805 1
54 806 1
55 807 20
56 827 4
57 831 4
shell> myisampack station.MYI
Compressing station.MYI: (1192 records)
- Calculating statistics
normal: 20 empty-space: 16 empty-zero: 12 empty-fill: 11
pre-space: 0 end-space: 12 table-lookups: 5 zero: 7
Original trees: 57 After join: 17
- Compressing file
87.14%
Remember to run myisamchk -rq on compressed tables
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.frm
shell> myisamchk -dvv station
MyISAM file: station
Isam-version: 2
Creation time: 1996-03-13 10:08:58
Recover time: 1997-04-17 19:04:26
Data records: 1192 Deleted blocks: 0
Datafile parts: 1192 Deleted data: 0
Datafile pointer (bytes): 3 Keyfile pointer (bytes): 1
Max datafile length: 16777215 Max keyfile length: 131071
Recordlength: 834
Record format: Compressed
table description:
Key Start Len Index Type Root Blocksize Rec/key
1 2 4 unique unsigned long 10240 1024 1
2 32 30 multip. text 54272 1024 1
Field Start Length Type Huff tree Bits
1 1 1 constant 1 0
2 2 4 zerofill(1) 2 9
3 6 4 no zeros, zerofill(1) 2 9
4 10 1 3 9
5 11 20 table-lookup 4 0
6 31 1 3 9
7 32 30 no endspace, not_always 5 9
8 62 35 no endspace, not_always, no empty 6 9
9 97 35 no empty 7 9
10 132 35 no endspace, not_always, no empty 6 9
11 167 4 zerofill(1) 2 9
12 171 16 no endspace, not_always, no empty 5 9
13 187 35 no endspace, not_always, no empty 6 9
14 222 4 zerofill(1) 2 9
15 226 16 no endspace, not_always, no empty 5 9
16 242 20 no endspace, not_always 8 9
17 262 20 no endspace, no empty 8 9
18 282 20 no endspace, no empty 5 9
19 302 30 no endspace, no empty 6 9
20 332 4 always zero 2 9
21 336 4 always zero 2 9
22 340 1 3 9
23 341 8 table-lookup 9 0
24 349 8 table-lookup 10 0
25 357 8 always zero 2 9
26 365 2 2 9
27 367 2 no zeros, zerofill(1) 2 9
28 369 4 no zeros, zerofill(1) 2 9
29 373 4 table-lookup 11 0
30 377 1 3 9
31 378 2 no zeros, zerofill(1) 2 9
32 380 8 no zeros 2 9
33 388 4 always zero 2 9
34 392 4 table-lookup 12 0
35 396 4 no zeros, zerofill(1) 13 9
36 400 4 no zeros, zerofill(1) 2 9
37 404 1 2 9
38 405 4 no zeros 2 9
39 409 4 always zero 2 9
40 413 4 no zeros 2 9
41 417 4 always zero 2 9
42 421 4 no zeros 2 9
43 425 4 always zero 2 9
44 429 20 no empty 3 9
45 449 30 no empty 3 9
46 479 1 14 4
47 480 1 14 4
48 481 79 no endspace, no empty 15 9
49 560 79 no empty 2 9
50 639 79 no empty 2 9
51 718 79 no endspace 16 9
52 797 8 no empty 2 9
53 805 1 17 1
54 806 1 3 9
55 807 20 no empty 3 9
56 827 4 no zeros, zerofill(2) 2 9
57 831 4 no zeros, zerofill(1) 2 9
myisampack显示下面的各种信息:
· normal
不需要进行额外压缩的列的数量ã€�
· empty-space
只包含空格的列的数量;占一个比特ã€�
· empty-zero
只包含二进制零的列的数量;占一个比特ã€�
· empty-fill
不占该类全字节范围的整数列的数量;这些列被改为较小的类型。例如,如果所有值的范围为从-128åˆ�127ï¼�BIGINTåˆ�(8个字èŠ�)可以保存ä¸�TINYINTåˆ�(1个字èŠ�)ã€�
· pre-space
用引导空格保存的十进制列的数量。在这种情况下,每个值包含一个引导空格的数量计数ã€�
· end-space
有大量结尾空格的列的数量。在这种情况下,每个值包含一个结尾空格的数量计数ã€�
· table-lookup
该列只有少量的不同的值,在进行哈夫曼压缩前被转换为一ä¸�ENUMã€�
· zero
所有值为零的列的数量ã€�
· Original trees
哈夫曼树的最初数量ã€�
· After join
联接树以节省一些头空间之后留下的哈夫曼树的数量ã€�
表被压缩后,myisamchk -dvv为每列输出详细信息:
· Type
列的类型。该值可以包含下面的任何描述符:
o constant
所有行具有相同的值ã€�
o no endspace
不保存结尾空格ã€�
o no endspace�not_always
不保存结尾空格并且对于所有的值不压缩结尾空格ã€�
o no endspace�no empty
不保存结尾空格。不保存空值ã€�
o table-lookup
列被转换为一ä¸�ENUMã€�
o zerofill(n)
值中最有意义的n字节总为0,并且不保存ã€�
o no zeros
不保存零ã€�
o always zeros
用一个位保存零值ã€�
· Huff tree
列相关的哈夫曼树的数量ã€�
· Bits
哈夫曼树使用的位数ã€�
运行myisampack后,必须运行myisamchk以重新创建索引。此时,你也可以排序索引块并创建MySQL优化器需要的统计信息以更有效地工作:
shell> myisamchk -rq --sort-index --analyze tbl_name.MYI
将压缩的表安装到MySQL数据库目录中后,应执è¡�mysqladmin flush-tables以强åˆ�mysqld使用新的表ã€�
要想解压缩一个压缩的表,使用myisamchkæˆ�isamchkçš�--unpack选项ã€�
mysql是一个简单的SQL外壳(æœ�GNU readline功能)。它支持交互式和非交互式使用。当交互使用时,查询结果采用ASCII表格式。当采用非交互式(例如,用作过滤器)模式时,结果ä¸�tab分割符格式。可以使用命令行选项更改输出格式ã€�
如果由于结果较大而内存不足遇到问题,使用--quick选项。这样可以强åˆ�mysql从服务器每次一行搜索结果,而不是检索整个结果集并在显示之前不得不将它保存到内存中。使ç”�mysql_use_result()而不æ˜�mysql_store_result()来搜索结果集ã€�
使用mysql很简单。从命令解释符提示来调用它:
shell> mysql db_name
或:
shell> mysql --user=user_name --password=your_password db_name
这样输入一ä¸�SQL语句,用â€�ï¼�’ã€�\g或è€�\G结尾并按回车键ã€�
你可以这样运行一个脚本:
shell> mysql db_name < script.sql > output.tab
mysql支持下面的选项ï¼�
· ---helpï¼�-ï¼�
显示帮助消息并退出ã€�
· --batchï¼�-B
打印结果,使ç”�tab作为列间隔符,每个行占用新的一行。使用该选项,则mysql不使用历史文件ã€�
· --character-sets -dir=path
字符集的安装目录。参è§�5.10.1节,“数据和排序用字符集â€�ã€�
· --compressï¼�-C
压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩)ã€�
· ---database=db_nameï¼�-D db_name
要使用的数据库。主要在选项文件中有用ã€�
· ---debug[=debug_options]ï¼�-# [debug_options]
写调试日志ã€�debug_options字符串通常ä¸�'d:t:o,file_name'ã€� 默认ä¸�'d:t:o,/tmp/mysql.trace'ã€�
· ---debug-infoï¼�-T
当程序退出时输出部分调试信息ã€�
· --default-character-set=charset
使用charsetas作为默认字符集。参è§�5.10.1节,“数据和排序用字符集â€�ã€�
· --execute=statement, -e statement
执行语句并退出。默认输出格式与ç”�--batch产生的相同ã€�4.3.1节,“在命令行上使用选项â€�中提供了一些例子ã€�
· --forceï¼�-f
即使出现一ä¸�SQL错误仍继续ã€�
· --host=host_nameï¼�-h host_name
连接给定主机上的MySQL服务器ã€�
· --htmlï¼�-H
产生HTML输出ã€�
· --ignore-spaceï¼�-i
忽视函数名后面的空格。其结果描述参见5.3.2节,“SQL服务器模式â€�中的IGNORE_SPACE的讨论ã€�
· --local-infile[={0|1}]
ä¸�LOAD DATA INFILE启用或禁ç”�LOCAL功能。没有值,该选项启用LOCAL。还可以采用--local-infile=0æˆ�--local-infile=1以显式禁用或启用LOCAL。如果服务器不支持,启用LOCAL不会生效ã€�
· --named-commandsï¼�-G
命名的命令被启用。允许长格式命令和短格式\*命令。例如,quitå’�\q均被识别ã€�
· --no-auto-rehashï¼�-A
不自动重新进行哈希运算。该选项ä½�mysql启动得更快,但果你想要完成表和列名,你必须发å‡�rehash命令ã€�
· --no-beepï¼�-b
当发生错误时不要保持ã€�
· --no-named-commandsï¼�-g
命名的命令被禁用。只使用\*形式,或者只使用行开头的命名用分å��(â€�ï¼�â€�)结束的的命令。对äº�MySQL 3.23.22,默认情å†�mysql启动时启用该选项。然而,即使使用该选项,长格式命令仍然从第1行工作ã€�
· --no-pager
不使用分页器来显示查询输出。在8.3.2节,â€�mysql命令â€�中详细讨论了输出分页ã€�
· --no-tee
不将输出复制到文件中。在8.3.2节,â€�mysql命令â€�中详细讨论了Tee文件ã€�
· --one--databaseï¼�-O
忽视除了为命令行中命名的默认数据库的语句。可以帮助跳过对二进制日志中的其它数据库的更新ã€�
· --pager[=command]
使用给出的命令来分页查询输出。如果该命令被删除,默认分页器为PAGER环境变量的值。合æ³�pagersæ˜�lessã€�moreã€�cat [>filename]等等。该选项只在Unix中工作。不能以批处理模式工作。在8.3.2节,â€�mysql命令â€�中详细讨论了输出分页ã€�
· --password[=password]ï¼�-p[password]
当连接服务器时使用的密码。如果使用短选项形式(-p),选项å’� 密码之间不能有空格。如果在命令行中--passwordæˆ�-p选项后面没有 密码值,则提示输入一个密码。在SysV-based UNIX系统中应省略密码,因为密码可以显示在ps的输出中ã€�
· --port=port_numï¼�-P port_num
用于连接çš�TCP/IP端口号ã€�
· --prompt=format_str
将提示设置为指定的格式。默认为mysql>。在8.3.2节,â€�mysql命令â€�中描述了提示中可以包含的具体顺序ã€�
· --protocol={TCP | SOCKET | PIPE | MEMORY}
使用的连接协议ã€�
· --quickï¼�-q
不缓存每个查询的结果,按照接收顺序打印每一行。如果输出被挂起,服务器会慢下来。使用该选项ï¼�mysql不使用历史文件ã€�
· --rawï¼�-r
写列的值而不转义转换。通常结合--batch选项使用ã€�
· --reconnect
如果与服务器之间的连接断开,自动尝试重新连接。每次连接断开后则尝试一次重新连接。要想禁止重新连接,使用--skip-reconnectã€�
· --safe-updatesï¼�--i-am-a-dummyï¼�-U
只允许那些使用键值指定行生效çš�UPDATEå’�DELETE语句。如果已经在选项文件中设置了该选项,可以用命令行中çš�--safe-updates覆盖它。关于该选项的详细信息参è§�8.3.4节,â€�mysql技巧â€�ã€�
· --secure-auth
不向æ—�(pre-4.1.1)格式的服务器发送密码。这样可以防止不使用新密码格式的服务器的连接ã€�
· --show-warnings
如果每个语句后有警告则显示。该选项适用于交互式和批处理模式ã€�
· --sigint-ignore
忽视SIGINT符号(一般为Control-C的结æž�)ã€�
· --silentï¼�-s
沉默模式。产生少的输出。可以多次使用该选项以产生更少的输出ã€�
· --skip-column-namesï¼�-N
在结果中不写列名ã€�
· --skip-line-numbersï¼�-L
在错误信息中不写行号。当你想要比较包括错误消息的结果文件时有用ã€�
· --socket=pathï¼�-S path
用于连接的套接字文件ã€�
· --tablesï¼�-t
用表格式显示输出。这是交互式应用的默认设置,但可用来以批处理模式产生表输出ã€�
· --tee=file_name
将输出拷贝添加到给定的文件中。该选项在批处理模式不工作。在8.3.2节,â€�mysql命令â€�中详细讨论了Tee文件ã€�
· --unbufferedï¼�-n
每次查询后刷新缓存区ã€�
· --user=user_nameï¼�-u user_name
当连接服务器æ—�MySQL使用的用户名ã€�
· --verboseï¼�-v
冗长模式。产生更多的输出。可以多次使用该选项以产生更多的输出ã€�(例如ï¼�-v -v -v甚至可以在批处理模式产生表输出格式)ã€�
· --versionï¼�-V
显示版本信息并退出ã€�
· --verticalï¼�-E
垂直输出查询输出的行。没有该选项,可以用\G结尾来指定单个语句的垂直输出ã€�
· --waitï¼�-w
如果不能建立连接,等待并重试而不是放弃ã€�
· --xmlï¼�-X
产生XML输出ã€�
你还可以使用--var_name=value选项设置下面的变量:
· connect_timeout
连接超时前的秒数ã€�(默认值是0ï¼�ã€�
· max_allowed_packet
从服务器发送或接收的最大包长度ã€�(默认值是16MBï¼�ã€�
· max_join_size
当使ç”�--safe-updates时联接中的行的自动限制ã€�(默认值是1,000,000ï¼�ã€�
· net_buffer_length
TCP/IP和套接字通信缓冲区大小ã€�(默认值是16KBï¼�ã€�
· select_limit
当使ç”�--safe-updatesæ—�SELECT语句的自动限制ã€�(默认值是1,000ï¼�ã€�
也可以使ç”�--set-variable=var_name=value or -O var_name=value语法来设置变量ã€�不赞成使ç”�该语æ³�ã€�
åœ�Unix中,mysql客户程序å��历史文件中写入已执行语句的一条记录。默认情况,历史文件名为.mysql_history并在根目录中重建。要想指定不同的文件,应设置MYSQL_HISTFILE环境变量的值ã€�
如果不想要历史文件,首先删除.mysql_history(如果有),然后使用下面的任何一种方法:
· å°�MYSQL_HISTFILE变量设到/dev/null。要想在每次登录时让该设置生效,将该设置放入外壳的一个启动文件中ã€�
· 创建.mysql_history,作为一个符号链接指å��/dev/nullï¼�
· shell> ln -s /dev/null $HOME/.mysql_history
只需要执行一次ã€�
mysql将发出的SQL语句发送到待执行的服务器。还有一系列命令mysql可以自己解释。要查看这些命令,在mysql>提示下输å…�helpæˆ�\hï¼�
mysql> help List of all MySQL commands: Note that all text commands must be first on line and end with ';' ? (\?) Synonym for `help'. clear (\c) Clear command. connect (\r) Reconnect to the server. Optional arguments are db and host. delimiter (\d) Set statement delimiter. NOTE: Takes the rest of the line as new delimiter. edit (\e) Edit command with $EDITOR. ego (\G) Send command to mysql server, display result vertically. exit (\q) Exit mysql. Same as quit. go (\g) Send command to mysql server. help (\h) Display this help. nopager (\n) Disable pager, print to stdout. notee (\t) Don't write into outfile. pager (\P) Set PAGER [to_pager]. Print the query results via PAGER. print (\p) Print current command. prompt (\R) Change your mysql prompt. quit (\q) Quit mysql. rehash (\#) Rebuild completion hash. source (\.) Execute a SQL script file. Takes a file name as an argument. status (\s) Get status information from the server. system (\!) Execute a system shell command. tee (\T) Set outfile [to_outfile]. Append everything into given outfile. use (\u) Use another database. Takes database name as argument. warnings (\W) Show warnings after every statement. nowarning (\w) Don't show warnings after every statement.
每个命令有长形式和短形式。长形式对大小写不敏感;短形式敏感。长形式后面可以加一个分号结束符,但短形式不可以ã€�
åœ�delimiter命令中,应避免使用反斜线(â€�\â€�),因为这æ˜�MySQL的转义符ã€�
Editã€�nopagerã€�pagerå’�system命令只在Unix中工作ã€�
status命令提供连接和使用的服务器相关的部分信息。如果用--safe-updates模式运行ï¼�status也打印影响查询的MySQL变量的值ã€�
要想记录查询及其输出,应使用tee命令。屏幕上显示的所有数据被追加到给定的文件后面。这对于调试也很有用。可以用--tee选项在命令行中启用该特性,或者用tee命令交互式启用。可以用notee命令交互式禁ç”�tee文件。再次执è¡�tee可以重新启用日志。前面的文件使用时不带任何参数。请注意执行完每个语句后tee可以将查询结果刷新到一个文件中,并且在mysql打印下一个提示前刷新ã€�
ç”�--pager选项,可以用交互式模式使ç”�Unix程序,例å¦�lessã€�more或者其它类似的程序,来浏览或搜索查询结果。如果未指定该选项的值,mysql检æŸ�PAGER环境变量的值并å°�PAGER设为该值。可以用pager命令交互式启用输出分页,并用nopager禁用。该命令采用可选参量;如果给出,分页程序设置为该值。如果没有给出参量,分页器被设置为在命令行中设置的分页器的值,如果未指定分页器,则设置ä¸�stdoutã€�
输出分页只适合Unix,因为它使用popen()函数,该函数åœ�Windows中不存在。在Windows中,可以使用tee选项来保存查询输出,尽管在某些情况下浏览输出时不å¦�pager方便ã€�
关于pager命令的一些技巧:
· 可以使用它写入一个文件,将结果只输出到该文件中:
· mysql> pager cat > /tmp/log.txt
也可以为将用作分页器的程序传递选项ï¼�
mysql> pager less -n -i -S
· 注意前面例子中的-S选项。它可以帮助浏览广范围的查询结果。有时太广的结果很难在屏幕上读出来ã€�lessçš�-S选项可以使结果更易于读,因为可以用左、右箭头水平滚动它。还可以åœ�less中交互式使用-S,以关闭或打开水平浏览模式。详细信息请阅读手册中的less页:
· shell> man less
· 可以指定很复杂的pager命令来处理查询输出:
· mysql> PAGER cat | tee /dr1/tmp/res.txt \
· | tee /dr2/tmp/res2.txt | less -n -i -S
在该例子中,该命令将查询结果发送到位于/dr1å’�/dr2上安装的两个不同的文件系统中的两个不同目录中的两个文件中,但仍然可以通过less将结果显示在屏幕上ã€�
还可以结合使ç”�teeå’�pager函数。启用一ä¸�tee文件并将pager设置ä¸�less,能够使ç”�less 程序浏览结果,并且仍然可以同时将内容添加到一个文件中。结å��pager命令使用çš�Unix teeå’� mysql嵌入å¼�tee命令的差别是即使没有可用çš�Unix tee,嵌入式tee仍然可以工作。嵌入式tee还可以记录在屏幕上输出的内容,而结å��pager命令使用çš�Unix tee不能记录那么多的内容。并且,可以ä»�MySQL中交互式打开或关é—�tee文件日志。当你想要将部分查询记录到一个文件中时很有用,但其它不适合ã€�
默认mysql>提示符可以重新配置。定义提示符的字符串可以包含下面的特殊序列:
|
选项 |
描述 |
|
\v |
服务器版æœ� |
|
\d |
当前的数据库 |
|
\h |
服务器主æœ� |
|
\p |
当前çš�TCP/IP端口或套接字文件 |
|
\u |
你的用户å�� |
|
\U |
你的å…�user_name@host_name账户å�� |
|
\\ |
â€�\’反斜线字符 |
|
\n |
新行字符 |
|
\t |
Tab字符 |
|
\ |
空格(反斜线后面的空格) |
|
\_ |
空格 |
|
\R |
当前的时间,24-小时军用时间(0-23) |
|
\r |
当前的时间,标准12-小时(1-12) |
|
\m |
当前时间的分é’� |
|
\y |
当前的年,两ä½� |
|
\Y |
当前的年,四ä½� |
|
\D |
当前的日æœ� |
|
\s |
当前时间的秒 |
|
\w |
当前周的天,3字符格式(Monï¼�Tueï¼�...) |
|
\P |
am/pm |
|
\o |
当前的月,数字格å¼� |
|
\O |
当前的月ï¼�3字符格式(Janï¼�Febï¼�...) |
|
\c |
随发出的每个语句递增的计æ•� |
|
\S |
分号 |
|
\' |
单引å�� |
|
\" |
双引å�� |
â€�\’后面跟随的其它字母则变为该字母ã€�
如果不用任何参量指定提示命令ï¼�mysql将提示重新设置位默认mysql>ã€�
可以用几种方式设置提示:
· 使用环境变量
可以ç”�MYSQL_PS1环境变量来设置提示字符串。例如:
shell> export MYSQL_PS1="(\u@\h) [\d]> "
· 使用选项文件
可以åœ�MySQL选项文件中的[mysql]组设置提示,例如根目录中çš�/etc/my.cnfæˆ�.my.cnf文件。例如:
[mysql]
prompt=(\\u@\\h) [\\d]>\\_
在该例子中,请注意反斜线是双线。如果使用选项文件中的prompt选项来设置提示,当使用特殊提示选项时,建议使用双反斜线。在允许的提示选项和选项文件中可识别的特殊转义序列中有部分重叠ã€�(这些序列列于4.3.2节,“使用选项文件â€�ï¼�ã€�如果使用单反斜线,会遇到问题。例如,\s被解释为空格而不是当前的秒值。下面的例子显示了如何在选项文件中定义提示以包括当前的时间,格式ä¸�HH:MM:SS>ï¼�
[mysql]
prompt="\\r:\\m:\\s> "
· 使用命令行选项
可以åœ�mysql的命令行中设ç½�--prompt选项。例如:
shell> mysql --prompt="(\u@\h) [\d]> "
(user@host) [database]>
· 交互å¼�
你可以使ç”�prompt(æˆ�\R)命令交互地更改提示。例如:
mysql> prompt (\u@\h) [\d]>\_
PROMPT set to '(\u@\h) [\d]>\_'
(user@host) [database]>
(user@host) [database]> prompt
Returning to default PROMPT of mysql>
mysql>
mysql客户程序一般交互使用:
shell> mysql db_name
还可以将SQL语句放到一个文件中然后告诉mysql从该文件读取输入。要想实现,创建一个文本文ä»�text_file,并包含你想要执行的语句。然后按如下所示调ç”�mysqlï¼�
shell> mysql db_name < text_file
还可以用一ä¸�USE db_name语句启动文本文件。在这种情况下,不需要在命令行中指定数据库名ï¼�
shell> mysql < text_file
如果正运è¡�mysql,可以使ç”�sourceæˆ�\.命令执行SQL脚本文件ï¼�
mysql> source filename
mysql> \. filename
有时想要使用脚本来向用户显示进度信息;为此可以插入下述行ï¼�
SELECT '<info_to_display>' AS ' '�
将输å‡�<info_to_display>ã€�
关于批处理模式的详细信息,参è§�3.5节,“在批处理模å¼�下使用mysqlâ€�ã€�
一些查询结果如果垂直显示而不用通常的水平表格式显示,则更容易读取。用\G而不用分号结束查询可以垂直显示查诀€‚例如,包括新行的更长的文本值垂直输出时通常更容易读取:
mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G
*************************** 1. row ***************************
msg_nro: 3068
date: 2000-03-01 23:29:50
time_zone: +0200
mail_from: Monty
reply: [email protected]
mail_to: "Thimble Smith" <[email protected]>
sbj: UTF-8
txt: >>>>> "Thimble" == Thimble Smith writes:
Thimble> Hi. I think this is a good idea. Is anyone familiar
Thimble> with UTF-8 or Unicode? Otherwise, I'll put this on my
Thimble> TODO list and see what happens.
Yes, please do that.
Regards,
Monty
file: inbox-jani-1
hash: 190402944
1 row in set (0.09 sec)
对于新手,有一个有用的启动选项--safe-updates(æˆ�--i-am-a-dummy,具有相同的效果)。当你已经发出一ä¸�DELETE FROM tbl_name语句但忘记了WHERE子句时很有用。通常情况,这样的语句从表中删除所有行。用--safe-updates,可以通过指定可以识别它们的键值只删除某些行。这样可以帮助防止事故ã€�
若使ç”�--safe-updates选项ï¼�mysql连接MySQL服务器时发出下面的语句:
SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=1000, SQL_MAX_JOIN_SIZE=1000000;
参见13.5.3节,“SET语法â€�ã€�
SET语句有下面的效果ï¼�
· 不允许你执行UPDATEæˆ�DELETE语句,除非在WHERE子句中指定一个键值约束或提供一ä¸�LIMIT子句(或二者皆使用)。例如:
· UPDATE tbl_name SET not_key_column=val WHERE key_column=val;
·
· UPDATE tbl_name SET not_key_column=val LIMIT 1;
· 所有大çš�SELECT结果自动限制åˆ�1,000行,除非语句包括一ä¸�LIMIT子句ã€�
· 放弃可能需要检æŸ�1,000,000多行组合的多è¡�SELECT语句ã€�
要将限制指定ä¸�1,000å’�1,000,000之外的值,可以使用--select_limitå’�--max_join_size选项覆盖默认值:
shell> mysql --safe-updates --select_limit=500 --max_join_size=10000
如果mysql客户程序发送查询时断开与服务器的连接,它立即并自动尝试重新连接服务器并再次发送查诀€‚然而,即使mysql重新连接成功,你的第1个连接也已经结束,并且以前的会话对象和设定值被丢失:包括临时表、自动提交模式,以及用户和会话变量。该行为很危险,如下面的例子所示,服务器将在你不知道的情况下关闭并重启ï¼�
mysql> SET @a=1;
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO t VALUES(@a);
ERROR 2006: MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 1
Current database: test
Query OK, 1 row affected (1.30 sec)
mysql> SELECT * FROM t;
+------+
| a |
+------+
| NULL |
+------+
1 row in set (0.05 sec)
@a用户变量已经随连接丢失,并且重新连接后它也没有定义。如果有必要在连接断开时终æ�mysql并提示错误,你可以用--skip-reconnect选项启动mysql客户程序ã€�
mysqlaccessæ˜�Yves Carlierä¸�MySQL分发提供的一个诊断工具。它检查访问权限的主机名、用户名和数据库组合。请注意 mysqlaccess检查只使用userã€�dbå’�host表的访问。它不检查在tables_privã€�columns_privæˆ�procs_priv表中指定的表、列或者程序的权限ã€�
调用mysqlaccess的方法:
shell> mysqlaccess [host_name [user_name [db_name]]] [options]
mysqlaccess理解下面的选项ï¼�
· ---helpï¼�-ï¼�
显示帮助消息并退出ã€�
· --briefï¼�-b
生成单行表格式的报告ã€�
· --commit
从临时表将新访问权限复制到原授权表。必须为新的权限刷新授权表以使其生效ã€�(例如,执è¡�mysqladmin RELOAD命令ï¼�ã€�
· --copy
从原授权表重载临时授权表ã€�
· --db=db_nameï¼�-d db_name
指定数据库名ã€�
· ---debug=N
指定调试级别ã€�N可以为从0åˆ�3的一个整数ã€�
· --host=host_nameï¼�-h host_name
在访问权限中使用的主机名ã€�
· --howto
显示一些例子显示如何使ç”�mysqlaccessã€�
· --old_server
假定服务器是一个旧版本çš�MySQL服务å™�(MySQL 3.21之前),还不知道如何处理全WHERE子句ã€�
· --password[=password]ï¼�-p[password]
当连接服务器时使用的密码。如果你在命令行中在--passwordæˆ�-p选项后面省略 密码值,将提示你输入密码ã€�
· --plan
显示将来发布的建议和思想ã€�
· --preview
更改临时授权表后显示权限的不同ã€�
· --relnotes
显示发布注解ã€�
· --rhost=host_nameï¼�-H host_name
连接给定主机çš�MySQL服务器ã€�
· --rollback
取消对临时授权表的最新的更改ã€�
· --spassword[=password]ï¼�-P[password]
ä»�super用户连接服务器时使用的密码。如果在命令行中åœ�--passwordæˆ�-p选项后面省略äº� 密码值,将提示你输入密码ã€�
· --superuser=user_nameï¼�-U user_name
指定ä»�super用户连接时的用户名ã€�
· --tablesï¼�-t
生成表格式的报告ã€�
· --user=user_nameï¼�-u user_name
在访问权限中使用的主机名ã€�
· --versionï¼�-v
显示版本信息并退出ã€�
如果你的MySQL分发安装在某个非标准位置,必须进å…�mysqlaccess期望找到mysql客户的目录。编辑大约在18行处çš�mysqlaccess脚本。搜索类似下面的一行:
$MYSQL = '/usr/local/bin/mysql'; # path to mysql executable
将路径更改为mysql实际在系统中保存的位置。如果不这样做,当运è¡�mysqlaccess时会发生Broken pipe错误ã€�
mysqladmin是一个执行管理操作的客户程序。可以用它来检查服务器的配置和当前的状态,创建并删除数据库等等ã€�
这样调用mysqladminï¼�
shell> mysqladmin [options] command [command-options] [command [command-options]] ...
mysqladmin支持下面的命令:
· create db_name
创建一个名ä¸�db_name的新数据库ã€�
· debug
告诉服务器向错误日志写入调试信息ã€�
· drop db_name
删除名为db_nam的数据库和所有表ã€�
· extended-status
显示服务器状态变量及其值ã€�
· flush-hosts
刷新主机缓存中的所有信息ã€�
· flush-logs
刷新所有日志ã€�
· flush-privileges
重载授权è¡�(类似reload)ã€�
· flush-status
清除状态变量ã€�
· flush-tables
刷新所有表ã€�
· flush-threads
刷新线程缓存ã€�
· kill id,id,...
杀掉服务器线程ã€�
· old-password new-password
类似password但使用旧çš�(pre-4.1)密码哈希格式保存 密码ã€�(参见5.7.9节,“MySQL 4.1中的密码哈希处理â€�ï¼�ã€�
· password new-password
设置一个新密码。将ç”�mysqladmin连接服务器使用的 账户的密码更改为new-passwordã€�
如果new-password包含空格或其它命令解释符的特殊字符,需要用引号将它引起来。在Windows中,一定要使用双引号而不要用单引号;单引号不会从 密码中剥离出来,而是解释为密码的一部分。例如:
shell> mysqladmin password "my new password"
· ping
检查服务器是否仍活动。如果服务器在运è¡�mysqladmin返回状æ€�0,如果不运行返回1。即使出现错误例å¦�Access denied也为0,因为这说明服务器在运行但拒绝了连接,与服务器不在运行不同ã€�
· processlist
显示活动服务器线程的列表。类ä¼�SHOW PROCESSLIST语句的输出。如果给出了--verbose选项,输出类ä¼�SHOW FULL PROCESSLISTã€�(参见13.5.4.16节,“SHOW PROCESSLIST语法â€�ï¼�ã€�
· reload
重载授权表ã€�
· refresh
刷新所有表并关闭和打开日志文件ã€�
· shutdown
停止服务器ã€�
· start-slave
开始从服务器上的复制ã€�
· status
显示短服务器状态消息ã€�
· stop-slave
停止从服务器上的复制ã€�
· variables
显示服务器系统变量及其值ã€�
· version
显示服务器的版本信息ã€�
所有命令可以简化为任何唯一的前缀。例如:
shell> mysqladmin proc stat
+----+-------+-----------+----+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------+-----------+----+---------+------+-------+------------------+
| 51 | monty | localhost | | Query | 0 | | show processlist |
+----+-------+-----------+----+---------+------+-------+------------------+
Uptime: 1473624 Threads: 1 Questions: 39487
Slow queries: 0 Opens: 541 Flush tables: 1
Open tables: 19 Queries per second avg: 0.0268
mysqladmin status命令的结果显示下面的值:
· Uptime
MySQL服务器已经运行的秒数ã€�
· Threads
活动线程(客户)的数目ã€�
· Questions
服务器启动以来客户的问题(查询)数目ã€�
· Slow queries
执行时间超过long_query_time秒的查询的数量。参è§�5.11.4节,“慢速查询日志â€�ã€�
· Opens
服务器已经打开的数据库表的数量ã€�
· Flush tables
服务器已经执行的flush ...ã€�refreshå’�reload命令的数量ã€�
· Open tables
目前打开的表的数量ã€�
· Memory in use
mysqld代码直接分配的内存数量。只有用--with--debug=full编译äº�MySQL该值才显示ã€�
· Maximum memory used
mysqld代码直接分配的最大内存数量。只有用--with--debug=full编译äº�MySQL该值才显示ã€�
如果当使ç”�Unix套接字文件连接本地服务器时执è¡�mysqladmin shutdownï¼�mysqladmin将等待直到服务器的进ç¨�ID文件被删除,以确保服务器正确停止ã€�
mysqladmin支持下面的选项ï¼�
· ---helpï¼�-ï¼�
显示帮助消息并退出ã€�
· --character-sets-dir=path
字符集的安装目录。参è§�5.10.1节,“数据和排序用字符集â€�ã€�
· --compressï¼�-C
压缩客户和服务器之间发送的所有信息(如果二者均支持压缩)ã€�
· --count=numï¼�-c num
迭代数目。该选项只有结合--sleep (-i)才能工作ã€�
· ---debug[=debug_options]ï¼�-# [debug_options]
写调试日志ã€�debug_options字符串通常ä¸�'d:t:o,file_name'ã€� 默认ä¸�'d:t:o,/tmp/mysqladmin.trace'ã€�
· --default-character-set=charset
使用charsetas作为默认字符集。参è§�5.10.1节,“数据和排序用字符集â€�ã€�
· --forceï¼�-f
不再ä¸�drop database命令进行确认。对于多个命令,即使出现错误也继续ã€�
· --host=host_nameï¼�-h host_name
连接给定主机上的MySQL服务器ã€�
· --password[=password]ï¼�-p[password]
连接服务器使用的密码。如果使用短选项形式(-p),该选项å’� 密码之间不能有空格。如果你在命令行中在--passwordæˆ�-p选项后面省略 密码值,将提示你输入密码ã€�
· --port=port_numï¼�-P port_num
用于连接çš�TCP/IP端口号ã€�
· --protocol={TCP | SOCKET | PIPE | MEMORY}
使用的连接协议ã€�
· --relativeï¼�-r
当带-I使用时显示当前和前面值的差别。目前,该选项只用äº�extended-status命令ã€�
· --silentï¼�-s
如果不能建立与服务器的连接则以沉默方式退出ã€�
· --sleep=delayï¼�-i delay
每睡çœ�delay秒后执行一次命令ã€�
· --socket=pathï¼�-S path
用于连接的套接字文件ã€�
· --user=user_nameï¼�-u user_name
当连接服务器时使用的MySQL用户名ã€�
· --verboseï¼�-v
冗长模式。打印出程序操作的详细信息ã€�
· --versionï¼�-V
显示版本信息并退出ã€�
· --verticalï¼�-E
垂直打印输出。类似于--relative,但垂直打印输出ã€�
· --wait[=count]ï¼�-w[count]
如果连接不能建立,等待并重试而不是放弃。如果给出一个选项值,则指示重试的次数。默认是一次ã€�
也可以使ç”�--var_name=value选项设置下面的变量:
· connect_timeout
连接超时之前的最大秒数。默认值为43200(12小时)ã€�
· shutdown_timeout
等候关闭的最大秒数。默认值为3600(1小时)ã€�
也可以使ç”�--set-variable=var_name=valueæˆ�-O var_name=value语法来设置变量。然而,现在不赞成该语法,并且不再使用ã€�
服务器生成的二进制日志文件写成二进制格式。要想检查这些文本格式的文件,应使用mysqlbinlog实用工具ã€�
应这样调ç”�mysqlbinlogï¼�
shell> mysqlbinlog [options] log-files...
例如,要想显示二进制日志binlog.000003的内容,使用下面的命令:
shell> mysqlbinlog binlog.0000003
输出包括åœ�binlog.000003中包含的所有语句,以及其它信息例如每个语句花费的时间、客户发出的线程ID、发出线程时的时间戳等等ã€�
通常情况,可以使ç”�mysqlbinlog直接读取二进制日志文件并将它们用于本åœ�MySQL服务器。也可以使用--read-from-remote-server选项从远程服务器读取二进制日志ã€�
当读取远程二进制日志时,可以通过连接参数选项来指示如何连接服务器,但它们经常被忽略掉,除非你还指定了--read-from-remote-server选项。这些选项æ˜�--hostã€�--passwordã€�--portã€�--protocolã€�--socketå’�--userã€�
还可以使ç”�mysqlbinlog来读取在复制过程中从服务器所写的中继日志文件。中继日志格式与二进制日志文件相同ã€�
åœ�5.11.3节,“二进制日志â€�中详细讨论了二进制日志ã€�
mysqlbinlog支持下面的选项ï¼�
· ---helpï¼�-ï¼�
显示帮助消息并退出ã€�
· ---database=db_nameï¼�-d db_name
只列出该数据库的条目(只用本地日志)ã€�
· --force-readï¼�-f
使用该选项,如æž�mysqlbinlog读它不能识别的二进制日志事件,它会打印警告,忽略该事件并继续。没有该选项,如æž�mysqlbinlog读到此类事件则停歀€�
· --hexdumpï¼�-H
在注释中显示日志的十六进制转储。该输出可以帮助复制过程中的调试。在MySQL 5.1.2中添加了该选项ã€�
· --host=host_nameï¼�-h host_name
获取给定主机上的MySQL服务器的二进制日志ã€�
· --local-load=pathï¼�-l pat
为指定目录中çš�LOAD DATA INFILE预处理本地临时文件ã€�
· --offset=Nï¼�-o N
跳过å‰�N个条目ã€�
· --password[=password]ï¼�-p[password]
当连接服务器时使用的密码。如果使用短选项形式(-p),选项å’� 密码之间不能有空格。如果在命令行中--passwordæˆ�-p选项后面没有 密码值,则提示输入一个密码ã€�
· --port=port_numï¼�-P port_num
用于连接远程服务器的TCP/IP端口号ã€�
· --position=Nï¼�-j N
不赞成使用,应使ç”�--start-positionã€�
· --protocol={TCP | SOCKET | PIPE | -position
使用的连接协议ã€�
· --read-from-remote-serverï¼�-R
ä»�MySQL服务器读二进制日志。如果未给出该选项,任何连接参数选项将被忽略。这些选项æ˜�--hostã€�--passwordã€�--portã€�--protocolã€�--socketå’�--userã€�
· --result-file=name, -r name
将输出指向给定的文件ã€�
· --short-formï¼�-s
只显示日志中包含的语句,不显示其它信息ã€�
· --socket=pathï¼�-S path
用于连接的套接字文件ã€�
· --start-datetime=datetime
从二进制日志中第1个日期时间等于或晚于datetime参量的事件开始读取ã€�datetime值相对于运行mysqlbinlog的机器上的本地时åŒ�ã€�è¯�值格式应符合DATETIMEæˆ�TIMESTAMP数据类型。例如:
shell> mysqlbinlog --start-datetime="2004-12-25 11:25:56" binlog.000003
该选项可以帮助点对点恢复ã€�
· --stop-datetime=datetime
从二进制日志中第1个日期时间等于或晚于datetime参量的事件起停止读。关äº�datetime值的描述参见--start-datetime选项。该选项可以帮助及时恢复ã€�
· --start-position=N
从二进制日志中第1个位置等äº�N参量时的事件开始读ã€�
· --stop-position=N
从二进制日志中第1个位置等于和大于N参量时的事件起停止读ã€�
· --to-last-logsï¼�-t
åœ�MySQL服务器中请求的二进制日志的结尾处不停止,而是继续打印直到最后一个二进制日志的结尾。如果将输出发送给同一å��MySQL服务器,会导致无限循环。该选项要求--read-from-remote-serverã€�
· --disable-logs-binï¼�-D
禁用二进制日志。如果使ç”�--to-last-logs选项将输出发送给同一å��MySQL服务器,可以避免无限循环。该选项在崩溃恢复时也很有用,可以避免复制已经记录的语句ã€�注释ï¼�该选项要求æœ�SUPER权限ã€�
· --user=user_nameï¼�-u user_name
连接远程服务器时使用çš�MySQL用户名ã€�
· --versionï¼�-V
显示版本信息并退出ã€�
还可以使ç”�--var_name=value选项设置下面的变量:
· open_files_limit
指定要保留的打开的文件描述符的数量ã€�
可以å°�mysqlbinlog的输出传åˆ�mysql客户端以执行包含在二进制日志中的语句。如果你有一个旧的备份,该选项在崩溃恢复时也很有用(参见5.9.1节,“数据库备份â€�)ï¼�
shell> mysqlbinlog hostname-bin.000001 | mysql
或:
shell> mysqlbinlog hostname-bin.[0-9]* | mysql
如果你需要先修改含语句的日志,还可以å°�mysqlbinlog的输出重新指向一个文本文件ã€�(例如,想删除由于某种原因而不想执行的语句)。编辑好文件后,将它输入åˆ�mysql程序并执行它包含的语句ã€�
mysqlbinlog有一ä¸�--position选项,只打印那些在二进制日志中的偏移量大于或等于某个给定位置的语å��(给出的位置必须匹配一个事件的开å§�)。它还有在看见给定日期和时间的事件后停止或启动的选项。这样可以使ç”�--stop-datetime选项进行点对点恢å¤�(例如,能够说“将数据库前滚动到今å¤�10:30 AM的位ç½�â€�)ã€�
如果MySQL服务器上有多个要执行的二进制日志,安全的方法是在一个连接中处理它们。下面是一个说明什么是不安å…�的例子:
shell> mysqlbinlog hostname-bin.000001 | mysql # DANGER!!
shell> mysqlbinlog hostname-bin.000002 | mysql # DANGER!!
使用与服务器的不同连接来处理二进制日志时,如果第1个日志文件包含一ä¸�CREATE TEMPORARY TABLE语句,第2个日志包含一个使用该临时表的语句,则会造成问题。当ç¬�1ä¸�mysql进程结束时,服务器撤销临时表。当ç¬�2ä¸�mysql进程想使用该表时,服务器报告 “不知道è¯�è¡�”ã€�
要想避免此类问题,使用一个连接来执行想要处理的所有二进制日志中的内容。下面提供了一种方法:
shell> mysqlbinlog hostname-bin.000001 hostname-bin.000002 | mysql
另一个方法是ï¼�
shell> mysqlbinlog hostname-bin.000001 > /tmp/statements.sql
shell> mysqlbinlog hostname-bin.000002 >> /tmp/statements.sql
shell> mysql -e "source /tmp/statements.sql"
mysqlbinlog产生的输出可以不需要原数据文件即可重新生成一ä¸�LOAD DATA INFILE操作ã€�mysqlbinlog将数据复制到一个临时文件并写一个引用该文件çš�LOAD DATA LOCAL INFILE语句。由系统确定写入这些文件的目录的默认位置。要想显式指定一个目录,使用--local-load选项ã€�
因为mysqlbinlog可以å°�LOAD
DATA INFILE语句转换ä¸�LOAD
DATA LOCAL INFILE语句(也就是说,它添加äº�LOCAL),用于处理语句的客户端和服务器必须配置为允许LOCAL操作。参è§�5.6.4节,“LOAD DATA LOCAL安全问题â€�ã€�
警告ï¼�ä¸�LOAD DATA LOCAL语句创建的临时文件不会自动删除,因为在实际执行完那些语句前需要它们。不再需要语句日志后应自己删除临时文件。文件位于临时文件目录中,文件名类似original_file_name-#-#ã€�
--hexdump选项可以在注释中产生日志内容的十六进制转储:
shell> mysqlbinlog --hexdump master-bin.000001
上述命令的输出应类似ï¼�
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
# at 4
#051024 17:24:13 server id 1 end_log_pos 98
# Position Timestamp Type Master ID Size Master Pos Flags
# 00000004 9d fc 5c 43 0f 01 00 00 00 5e 00 00 00 62 00 00 00 00 00
# 00000017 04 00 35 2e 30 2e 31 35 2d 64 65 62 75 67 2d 6c |..5.0.15.debug.l|
# 00000027 6f 67 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |og..............|
# 00000037 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
# 00000047 00 00 00 00 9d fc 5c 43 13 38 0d 00 08 00 12 00 |.......C.8......|
# 00000057 04 04 04 04 12 00 00 4b 00 04 1a |.......K...|
# Start: binlog v 4, server v 5.0.15-debug-log created 051024 17:24:13
# at startup
ROLLBACK;
十六进制转储的输出包含下面的元素ï¼�
· Position: The byte position within the log file.
· Timestamp: The event timestamp. In the example just shown, '9d fc 5c 43' is the representation of '051024 17:24:13' in hexadecimal.
· Type: The type of the log event. '0f' means that the example event is a FORMAT_DESCRIPTION_EVENT. The types are:
· 00 UNKNOWN_EVENT
· This event should never be present in the log.
· 01 START_EVENT_V3
· This indicates the start of a log file written by MySQL 4 or earlier.
· 02 QUERY_EVENT
· The most common type of events. These contain queries executed
· on the master.
· 03 STOP_EVENT
· Indicates that master has stopped.
· 04 ROTATE_EVENT
· Written when the master switches to a new log file.
· 05 INTVAR_EVENT
· Used mainly for AUTO_INCREMENT values and if the LAST_INSERT_ID()
· function is used in the statement.
· 06 LOAD_EVENT
· Used for LOAD DATA INFILE in MySQL 3.23.
· 07 SLAVE_EVENT
· Reserved for future use.
· 08 CREATE_FILE_EVENT
· Used for LOAD DATA INFILE statements. This indicates the start
· of execution of such a statement. A temporary file is created
· on the slave. Used in MySQL 4 only.
· 09 APPEND_BLOCK_EVENT
· Contains data for use in a LOAD DATA INFILE statement. The
· data is stored in the temporary file on the slave.
· 0a EXEC_LOAD_EVENT
· Used for LOAD DATA INFILE statements. The contents of the
· temporary file is stored in the table on the slave.
· Used in MySQL 4 only.
· 0b DELETE_FILE_EVENT
· Rollback of LOAD DATA INFILE statement. The temporary file
· should be deleted on slave.
· 0c NEW_LOAD_EVENT
· Used for LOAD DATA INFILE in MySQL 4 and earlier.
· 0d RAND_EVENT
· Used to send information about random values if the RAND()
· function is used in the query.
· 0e USER_VAR_EVENT
· Used to replicate user variables.
· 0f FORMAT_DESCRIPTION_EVENT
· This indicates the start of a log file written by MySQL 5 or later.
· 10 XID_EVENT
· Event indicating commit of XA transaction
· 11 BEGIN_LOAD_QUERY_EVENT
· Used for LOAD DATA statements in MySQL 5 and later.
· 12 EXECUTE_LOAD_QUERY_EVENT
· Used for LOAD DATA statements in MySQL 5 and later.
· 13 TABLE_MAP_EVENT
· Reserved for future use
· 14 WRITE_ROWS_EVENT
· Reserved for future use
· 15 UPDATE_ROWS_EVENT
· Reserved for future use
· 16 DELETE_ROWS_EVENT
· Reserved for future use
· Master ID: The server id of the master that created the event.
· Size: The size in bytes of the event.
· Master Pos: The position of the event in the original master log file.
· Flags: 16 flags.
· 01 LOG_EVENT_BINLOG_IN_USE_F
· Log file correctly closed (Used only in FORMAT_DESCRIPTION_EVENT)
· If this flag is set (if the flags are e.g. '01 00') in an
· FORMAT_DESCRIPTION_EVENT, then the log file has not been
· properly closed. Most probably because of a master crash (for
· example, due to power failure).
· 02 Reserved for future use.
· 04 LOG_EVENT_THREAD_SPECIFIC_F
· Set if the event is dependent on the connection it was
· executed in (example '04 00'), e.g. if the event uses
· temporary tables.
· 08 LOG_EVENT_SUPPRESS_USE_F
· Set in some circumstances when the event is not dependent on
· the current database
其它标志保留用于将来使用ã€�
在以后的版本中十六进制转储输出的格式可能会改变ã€�
mysqlcheck客户端可以检查和修复MyISAM表。它还可以优化和分析表ã€�
mysqlcheck的功能类ä¼�myisamchk,但其工作不同。主要差别是å½�mysqld服务器在运行时必须使ç”�mysqlcheck,è€�myisamchk应用于服务器没有运行时。使ç”�mysqlcheckçš�好处是不需要停止服务器来检查或修复表ã€�
Mysqlcheck为用户提供了一种方便的使用SQL语句CHECK TABLEã€�REPAIR TABLEã€�ANALYZE TABLEå’�OPTIMIZE TABLE的方式。它确定在要执行的操作中使用使用哪个语句,然后将语句发送到要执行的服务器上ã€�
æœ�3种方式来调用mysqlcheckï¼�
shell> mysqlcheck[options] db_name [tables]
shell> mysqlcheck[options] ---database DB1 [DB2 DB3...]
shell> mysqlcheck[options] --all--database
如果没有指定任何表或使用---databaseæˆ�--all--database选项,则检查整个数据库ã€�
同其它客户端比较ï¼�mysqlcheck有一个特殊特性。重新命名二进制可以更改检查表的默认行ä¸�(--check)。如果你想要一个工具默认可以修复表的工具,只需要将mysqlcheck重新复制ä¸�mysqlrepair,或者使用一个符号链æŽ�mysqlrepair链接mysqlcheck。如果调ç”�mysqlrepair,可按照命令修复表ã€�
下面的名可用来更æ”�mysqlcheck的默认行为:
|
mysqlrepair |
默认选项ä¸�--repair |
|
mysqlanalyze |
默认选项ä¸�--analyze |
|
mysqloptimize |
默认选项ä¸�--optimize |
mysqlcheck支持下面的选项ï¼�
· ---helpï¼�-ï¼�
显示帮助消息并退出ã€�
· --all--databaseï¼�-A
检查所有数据库中的所有表。与使用---database选项相同,在命令行中命名所有数据库ã€�
· --all-in-1ï¼�-1
不是为每个表发出一个语句,而是为命名数据库中待处理的所有表的每个数据库执行一个语句ã€�
· --analyzeï¼�-a
分析表ã€�
· --auto-repair
如果某个被检查的表破坏了,自动修复它。检查完所有表后自动进行所有需要的修复ã€�
· --character-sets-dir=path
字符集的安装目录。参è§�5.10.1节,“数据和排序用字符集â€�ã€�
· --checkï¼�-c
检查表的错误ã€�
· --check-only-changedï¼�-C
只检查上次检查以来已经更改的或没有正确关闭的表ã€�
· --compress
压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩)ã€�
· ---databaseï¼�-B
处理数据库中命名的所有表。使用该选项,所有字名参量被看作数据库名,而不是表名ã€�
· ---debug[=debug_options]ï¼�-# [debug_options]
写调试日志ã€�debug_options字符串通常ä¸�'d:t:o,file_name'ã€�
· --default-character-set=charset
使用charsetas默认字符集。参è§�5.10.1节,“数据和排序用字符集â€�ã€�
· --extendedï¼�-e
如果你正使用该选项来检查表,可以确保它ä»�100%地一致,但需要很长的时间ã€�
如果你正使用该选项来修复表,则运行扩展修复,不但执行的时间很长,而且还会产生大量的垃圾行!
· --fastï¼�-F
只检查没有正确关闭的表ã€�
· --forceï¼�-f
即使出现SQL错误也继续ã€�
· --host=host_nameï¼�-h host_name
连接给定主机上的MySQL服务器ã€�
· --medium-checkï¼�-m
执行æ¯�--extended操作更快的检查。只能发çŽ�99.99%的错误,在大多数情况下这已经足够了ã€�
· --optimizeï¼�-o
优化表ã€�
· --password[=password]ï¼�-p[password]
当连接服务器时使用的密码。如果使用短选项形式(-p),选项å’� 密码之间不能有空格。如果在命令行中--passwordæˆ�-p选项后面没有 密码值,则提示输入一个密码ã€�
· --port=port_numï¼�-P port_num
用于连接çš�TCP/IP端口号ã€�
· --protocol={TCP | SOCKET | PIPE | MEMORY}
使用的连接协议ã€�
· --quickï¼�-q
如果你正使用该选项在检查表,它防止扫描行以检查错误链接的检查。这是最快的检查方法ã€�
如果你正使用该选项在修复表,它尝试只修复索引树。这是最快的修复方法ã€�
· --repairï¼�-r
执行可以修复大部分问题的修复,只是唯一值不唯一时不能修复ã€�
· --silentï¼�-s
沉默模式。只打印错误消息ã€�
· --socket=pathï¼�-S path
用于连接的套接字文件ã€�
· --tables
覆盖---databaseæˆ�-B选项。选项后面的所有参量被视为表名ã€�
· --user=user_nameï¼�-u user_name
当连接服务器时使用的MySQL用户名ã€�
· --verboseï¼�-v
冗长模式。打印关于各阶段程序操作的信息ã€�
· --versionï¼�-V
显示版本信息并退出ã€�
mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一ä¸�SQL服务å™�(不一定是一ä¸�MySQL服务å™�)。转储包含创建表å’�/或装载表çš�SQL语句ã€�
如果你在服务器上进行备份,并且表均为MyISAM表,应考虑使用mysqlhotcopy,因为可以更快地进行备份和恢复。参è§�8.9节,“mysqlhotcopy:数据库备份程序â€�ã€�
æœ�3种方式来调用mysqldumpï¼�
shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] ---database DB1 [DB2 DB3...]
shell> mysqldump [options] --all--database
如果没有指定任何表或使用äº�---databaseæˆ�--all--database选项,则转储整个数据库ã€�
要想获得你的版本çš�mysqldump支持的选项,执è¡�mysqldump ---helpã€�
如果运行mysqldump没有--quickæˆ�--opt选项ï¼�mysqldump在转储结果前将整个结果集装入内存。如果转储大数据库可能会出现问题。该选项默认启用,但可以ç”�--skip-opt禁用ã€�
如果使用最新版本的mysqldump程序生成一个转储重装到很旧版本çš�MySQL服务器中,不应使ç”�--optæˆ�-e选项ã€�
mysqldump支持下面的选项ï¼�
· ---helpï¼�-ï¼�
显示帮助消息并退出ã€�
· --add-drop--database
在每ä¸�CREATE DATABASE语句前添åŠ�DROP DATABASE语句ã€�
· --add-drop-tables
在每ä¸�CREATE TABLE语句前添åŠ�DROP TABLE语句ã€�
· --add-locking
ç”�LOCK TABLESå’�UNLOCK TABLES语句引用每个表转储。重载转储文件时插入得更快。参è§�7.2.16节,“INSERT语句的速度â€�ã€�
· --all--databaseï¼�-A
转储所有数据库中的所有表。与使用---database选项相同,在命令行中命名所有数据库ã€�
· --allow-keywords
允许创建关键字列名。应在每个列名前面加上表名前缀ã€�
· ---comments[={0|1}]
如果设置ä¸� 0,禁止转储文件中的其它信息,例如程序版本、服务器版本和主机ã€�--skipâ€�commentsä¸�---comments=0的结果相同ã€� 默认值为1,即包括额外信息ã€�
· --compact
产生少量输出。该选项禁用注释并启ç”�--skip-add-drop-tablesã€�--no-set-namesã€�--skip-disable-keyså’�--skip-add-locking选项ã€�
· --compatible=name
产生与其它数据库系统或旧çš�MySQL服务器更兼容的输出。值可以为ansiã€�mysql323ã€�mysql40ã€�postgresqlã€�oracleã€�mssqlã€�db2ã€�maxdbã€�no_key_optionsã€�no_tables_options或è€�no_field_options。要使用几个值,用逗号将它们隔开。这些值与设置服务å™�SQL模式的相应选项有相同的含义。参è§�5.3.2节,“SQL服务器模式â€�ã€�
该选项不能保证同其它服务器之间的兼容性。它只启用那些目前能够使转储输出更兼容的SQL模式值。例如,--compatible=oracle 不映å°�Oracle类型或使ç”�Oracle注释语法的数据类型ã€�
· --complete-insertï¼�-c
使用包括列名的完整的INSERT语句ã€�
· --compressï¼�-C
压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩)ã€�
· --create-option
åœ�CREATE TABLE语句中包括所æœ�MySQL表选项ã€�
· ---databaseï¼�-B
转储几个数据库。通常情况ï¼�mysqldump将命令行中的ç¬�1个名字参量看作数据库名,后面的名看作表名。使用该选项,它将所有名字参量看作数据库名ã€�CREATE DATABASE IF NOT EXISTS db_nameå’�USE db_name语句包含在每个新数据库前的输出中ã€�
· ---debug[=debug_options]ï¼�-# [debug_options]
写调试日志ã€�debug_options字符串通常ä¸�'d:t:o,file_name'ã€�
· --default-character-set=charset
使用charsetas默认字符集。参è§�5.10.1节,“数据和排序用字符集â€�。如果没有指定,mysqldump使用utf8ã€�
· --delayed-insert
使用INSERT DELAYED语句插入行ã€�
· --delete-master-logs
在主复制服务器上,完成转储操作后删除二进制日志。该选项自动启用--master-dataã€�
· --disable-keysï¼�-K
对于每个表,ç”�/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;å’�/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地装载转储文件,因为在插入所有行后创建索引。该选项只适合MyISAM表ã€�
· --extended-insertï¼�-e
使用包括几个VALUES列表的多è¡�INSERT语法。这样使转储文件更小,重载文件时可以加速插入ã€�
· --fields-terminated-by=...ï¼�--fields-enclosed-by=...ï¼�--fields-optionally-enclosed-by=...ï¼�--fields-escaped-by=...ï¼�--è¡�-terminated-by=...
这些选项结合-T选项使用,与LOAD DATA INFILE的相应子句有相同的含义。参è§�13.2.5节,“LOAD DATA INFILE语法â€�ã€�
· --first-slaveï¼�-x
不赞成使用,现在重新命名ä¸�--lock-all-tablesã€�
· --flush-logsï¼�-F
开始转储前刷新MySQL服务器日志文件。该选项要求RELOAD权限。请注意如果结合--all--database(æˆ�-A)选项使用该选项ï¼�根据每个转储的数据库刷新日志。例外情况是当使ç”�--lock-all-tablesæˆ�--master-data的时候:在这种情况下,日志只刷新一次,在所æœ� 表被锁定后刷新。如果你想要同时转储和刷新日志,应使ç”�--flush-logs连同--lock-all-tablesæˆ�--master-dataã€�
· --forceï¼�-f
在表转储过程中,即使出现SQL错误也继续ã€�
· --host=host_nameï¼�-h host_name
从给定主机的MySQL服务器转储数据。默认主机是localhostã€�
· --hex-blob
使用十六进制符号转储二进制字符串åˆ�(例如ï¼�'abc' 变为0x616263)。影响到的列æœ�BINARYã€�VARBINARYã€�BLOBã€�
· --lock-all-tablesï¼�-x
所有数据库中的所有表加锁。在整体转储过程中通过全局读锁定来实现。该选项自动关闭--single-transactionå’�--lock-tablesã€�
· --lock-tablesï¼�-l
开始转储前锁定所有表。用READ LOCAL锁定表以允许并行插入MyISAM表。对于事务表例如InnoDBå’�BDBï¼�--single-transaction是一个更好的选项,因为它不根本需要锁定表ã€�
请注意当转储多个数据库时ï¼�--lock-tables分别为每个数据库锁定表。因此,该选项不能保证转储文件中的表在数据库之间的逻辑一致性。不同数据库表的转储状态可以完全不同ã€�
· --master-data[=value]
该选项将二进制日志的位置和文件名写入到输出中。该选项要求æœ�RELOAD权限,并且必须启用二进制日志。如果该选项值等äº�1,位置和文件名被写入CHANGE MASTER语句形式的转储输出,如果你使用该SQL转储主服务器以设置从服务器,从服务器从主服务器二进制日志的正确位置开始。如果选项值等äº�2ï¼�CHANGE MASTER语句被写æˆ�SQL注释。如æž�value被省略,这是默认动作ã€�
--master-data选项启用--lock-all-tables,除非还指定--single-transaction(在这种情况下,只在刚开始转储时短时间获得全局读锁定。又è§�--single-transaction。在任何一种情况下,日志相关动作发生在转储时。该选项自动关闭--lock-tablesã€�
· --no-create-dbï¼�-n
该选项禁用CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name语句,如果给å‡�---databaseæˆ�--all--database选项,则包含到输出中ã€�
· --no-create-infoï¼�-t
不写重新创建每个转储表的CREATE TABLE语句ã€�
· --no-dataï¼�-d
不写表的任何行信息。如果你只想转储表的结构这很有用ã€�
· --opt
该选项是速记;等同于指定 --add-drop-tables--add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset。它可以给出很快的转储操作并产生一个可以很快装å…�MySQL服务器的转储文件ã€�该选项默认开启,但可以用--skip-opt禁用。要想只禁用确信ç”�-opt启用的选项,使ç”�--skip形式;例如,--skip-add-drop-tablesæˆ�--skip-quickã€�
· --password[=password]ï¼�-p[password]
连接服务器时使用的密码。如果你使用短选项形式(-p)ï¼�不能在选项和密码之间有一个空æ �。如果在命令行中,忽略了--passwordæˆ�-p选项后面çš� 密码值,将提示你输入一个ã€�
· --port=port_numï¼�-P port_num
用于连接çš�TCP/IP端口号ã€�
· --protocol={TCP | SOCKET | PIPE | MEMORY}
使用的连接协议ã€�
· --quickï¼�-q
该选项用于转储大的表。它强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行并在输出前将它缓存到内存中ã€�
· --quote-namesï¼�-Q
用â€�`’字符引用数据库、表和列名。如果服务器SQL模式包括ANSI_QUOTES选项,用â€�"’字符引用名。默认启用该选项。可以用--skip-quote-names禁用,但该选项应跟在其它选项后面,例如可以启ç”�--quote-namesçš�--compatibleã€�
· --result-file=fileï¼�-r file
将输出转向给定的文件。该选项应用åœ�Windows中,因为它禁止将新行â€�\n’字符转换为â€�\r\n’回车、返å›�/新行序列ã€�
· --routinesï¼�-R
在转储的数据库中转储存储程序(函数和程åº�)。使ç”�---routines产生的输出包å��CREATE PROCEDUREå’�CREATE FUNCTION语句以重新创建子程序。但是,这些语句不包括属性,例如子程序定义者或创建和修改时间戳。这说明当重载子程序时,对它们进行创建时定义者应设置为重载用户,时间戳等于重载时间ã€�
如果你需要创建的子程序使用原来的定义者和时间戳属性,不使ç”�--routines。相反,使用一个具æœ�mysql数据库相应权限的MySQL账户直接转储和重è½�mysql.proc表的内容ã€�
该选项åœ�MySQL 5.1.2中添加进来。在此之前,存储程序不转储ã€�
· --set-charset
å°�SET NAMES default_character_set加到输出中。该选项默认启用。要想禁ç”�SET NAMES语句,使ç”�--skip-set-charsetã€�
· --single-transaction
该选项从服务器转储数据之前发出一ä¸�BEGIN SQL语句。它只适用于事务表,例å¦�InnoDBå’�BDB,因为然后它将在发出BEGIN而没有阻塞任何应用程序时转储一致的数据库状态ã€�
当使用该选项时,应记住只æœ�InnoDB表能以一致的状态被转储。例如,使用该选项时任何转储的MyISAMæˆ�HEAP表仍然可以更改状态ã€�
--single-transaction选项å’�--lock-tables选项是互斥的,因ä¸�LOCK TABLES会使任何挂起的事务隐含提交ã€�
要想转储大的表,应结å��--quick使用该选项ã€�
· --socket=pathï¼�-S path
当连æŽ�localhost(为默认主æœ�)时使用的套接字文件ã€�
· --skip--comments
参见---comments选项的描述ã€�
· --tab=pathï¼�-T path
产生tab分割的数据文件。对于每个转储的表,mysqldump创建一个包含创建表çš�CREATE TABLE语句çš�tbl_name.sql文件,和一个包含其数据çš�tbl_name.txt文件。选项值为写入文件的目录ã€�
默认情况ï¼�.txt数据文件的格式是在列值和每行后面的新行之间使ç”�tab字符。可以使ç”�--fields-xxxå’�--è¡�--xxx选项明显指定格式ã€�
注释ï¼�该选项只适用äº�mysqldumpä¸�mysqld服务器在同一台机器上运行时。你必须具有FILE权限,并且服务器必须有在你指定的目录中有写文件的许可ã€�
· --tables
覆盖---databaseæˆ�-B选项。选项后面的所有参量被看作表名ã€�
· --triggers
为每个转储的表转储触发器。该选项默认启用;用--skip-triggers禁用它ã€�
· --tz-utc
在转储文件中加入SET TIME_ZONE='+00:00'以便TIMESTAMP列可以在具有不同时区的服务器之间转储和重载ã€�(不使用该选项ï¼�TIMESTAMP列在具有本地时区的源服务器和目的服务器之间转储和重载ï¼�ã€�--tz-utc也可以保护由于夏令时带来的更改ã€�--tz-utc默认启用。要想禁用它,使ç”�--skip-tz-utc。该选项åœ�MySQL 5.1.2中加入ã€�
· --user=user_nameï¼�-u user_name
连接服务器时使用çš�MySQL用户名ã€�
· --verboseï¼�-v
冗长模式。打印出程序操作的详细信息ã€�
· --versionï¼�-V
显示版本信息并退出ã€�
· --where='where-condition', -w 'where-condition'
只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来ã€�
例如ï¼�
"--where=user='jimf'"
"-wuserid>1"
"-wuserid<1"
· --xmlï¼�-X
将转储输出写æˆ�XMLã€�
还可以使ç”�--var_name=value选项设置下面的变量:
· max_allowed_packet
客户ç«�/服务器之间通信的缓存区的最大大小。最大为1GBã€�
· net_buffer_length
客户ç«�/服务器之间通信的缓存区的初始大小。当创建多行插入语句æ—�(如同使用选项--extended-insertæˆ�--opt)ï¼�mysqldump创建长度è¾�net_buffer_length的行。如果增加该变量,还应确保在MySQL服务器中çš�net_buffer_length变量至少这么大ã€�
还可以使ç”�--set-variable=var_name=valueæˆ�-O var_name=value语法设置变量。然而,现在不赞成使用该语法ã€�
mysqldump最常用于备份一个整个的数据库:
shell> mysqldump --opt db_name > backup-file.sql
你可以这样将转储文件读回到服务器ï¼�
shell> mysql db_name < backup-file.sql
或者为ï¼�
shell> mysql -e "source /path-to--backup/backup-file.sql" db_name
mysqldump也可用于从一ä¸�MySQL服务器向另一个服务器复制数据时装载数据库ï¼�
shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name
可以用一个命令转储几个数据库ï¼�
shell> mysqldump ---database db_name1 [db_name2 ...] > my_databases.sql
如果你想要转储所有数据库,使ç”�--all--database选项ï¼�
shell> mysqldump --all-databases > all_databases.sql
如果表保存在InnoDB存储引擎中,mysqldump提供了一种联机备份的途径(参见下面的命ä»�)。该备份只需要在开始转储时对所有表进行全局读锁å®�(使用FLUSH TABLES WITH READ LOCK)。获得锁定后,读取二进制日志的相应内容并将锁释放。因此如果并且只有当发出FLUSH...时正执行一个长的更新语句,MySQL服务器才停止直到长语句结束,然后转储则释放锁。因此如æž�MySQL服务器只接收到短("短执行时é—�")的更新语句,即使有大量的语句,也不会注意到锁期间ã€�
shell> mysqldump --all-databases --single-transaction > all_databases.sql
对于点对点恢å¤�(也称为“前滚”,当你需要恢复旧的备份并重放该备份以后的更改æ—�),循环二进制日志(参见5.11.3节,“二进制日志â€�)或至少知道转储对应的二进制日志内容很有用ï¼�
shell> mysqldump --all-databases --master-data=2 > all_databases.sql
�
shell> mysqldump --all-databases --flush-logs --master-data=2 > all_databases.sql
如果表保存在InnoDB存储引擎中,同时使用--master-dataå’�--single-transaction提供了一个很方便的方式来进行适合点对点恢复的联机备份ã€�
关于备份的详细信息,参见5.9.1节,“数据库备份â€�ã€�
mysqlhotcopy是一ä¸�Perl脚本,最初由Tim Bunce编写并提供。它使用LOCK TABLESã€�FLUSH TABLESå’�cpæˆ�scp来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库目录所在的机器上ã€�mysqlhotcopy只用于备ä»�MyISAM。它运行åœ�Unixå’�NetWare中ã€�
shell> mysqlhotcopy db_name [/path/to/new_directory]
shell> mysqlhotcopy db_name_1 ... db_name_n /path/to/new_directory
备份给定数据库中的匹配正则表达式的表ï¼�
shell> mysqlhotcopy db_name./regex/
加上发音ç¬�(â€�~â€�)前缀,表名的正则表达式可以被否定ï¼�
shell> mysqlhotcopy db_name./~regex/
mysqlhotcopy支持下面的选项ï¼�
· ---helpï¼�-ï¼�
显示帮助消息并退出ã€�
· --allowold
如果目标存在不放å¼�(加上一ä¸�_old后缀重新命名å®�)ã€�
· --checkpoint=db_name.tbl_name
在指定的db_name.tbl_name插入检查点条目ã€�
· ---debug
启用调试输出ã€�
· --dryrunï¼�-n
报告动作而不执行它们ã€�
· --flushlog
所有表锁定后刷新日志ã€�
· --keepold
完成后不删除以前(重新命名çš�)的目标ã€�
· -- method=command
复制方法(cpæˆ�scp)ã€�
· --noindices
备份中不包括全部索引文件。这样使备份更小、更快。可以在以后ç”�myisamchk -rq重新构建索引ã€�
· --password=passwordï¼�-p password
当连接服务器时使用的密码。请注意该选项的密码值是不可选的,不象其å®�MySQL程序ã€�
· --port=port_numï¼�-P port_num
当连接本地服务器时使用的TCP/IP端口号ã€�
· --quietï¼�-q
除了出现错误时保持沉默ã€�
· --regexp=expr
复制所有数据库名匹配给出的正则表达式的数据库ã€�
· --socket=pathï¼�-S path
用于连接çš�Unix套接字文件ã€�
· --suffix=str
所复制的数据库名的后缀ã€�
· --tmpdir=path
临时目录(代替/tmp)ã€�
· --user=user_nameï¼�-u user_name
当连接服务器时使用的MySQL用户名ã€�
mysqlhotcopy从选项文件读取[client]å’�[mysqlhotcopy]选项组ã€�
要想执行mysqlhotcopy,你必须可以访问备份的表文件,具有那些表çš�SELECT权限å’�RELOAD权限(以便能够执行FLUSH TABLES)ã€�
使用perldoc调用其它mysqlhotcopy文档ï¼�
shell> perldoc mysqlhotcopy
mysqlimport客户端提供了LOAD DATA INFILEQL语句的一个命令行接口ã€�mysqlimport的大多数选项直接对应LOAD DATA INFILE子句。参è§�13.2.5节,“LOAD DATA INFILE语法â€�ã€�
这样调用mysqlimportï¼�
shell> mysqlimport [options] db_name textfile1 [textfile2 ...]
对于在命令行中命名的每个文本文件ï¼�mysqlimport去掉文件名的扩展名并使用结果来确定将导入文件内容的表名。例如,文件 patient.txtã€�patient.textå’�patient均将导入è¡�patientã€�
mysqlimport支持下面的选项ï¼�
· ---helpï¼�-ï¼�
显示帮助消息并退出ã€�
· --columns=column_list, -c column_list
该选项采用用逗号分隔的列名作为其值。列名的顺序指示如何匹配数据文件列和表列ã€�
· --compressï¼�-C
压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩)ã€�
· ---debug[=debug_options]ï¼�-# [debug_options]
写调试日志ã€�debug_options字符串通常æ˜�'d:t:o,file_name'ã€�
· --deleteï¼�-D
导入文本文件前清空表ã€�
· --fields-terminated-by=...ï¼�--fields-enclosed-by=...ï¼�--fields-optionally-enclosed-by=...ï¼�--fields-escaped-by=...ï¼�--lines-terminated-by=...
这些选项ä¸�LOAD DATA INFILE相应子句的含义相同。参è§�13.2.5节,“LOAD DATA INFILE语法â€�ã€�
· --forceï¼�-f
忽视错误。例如,如果某个文本文件的表不存在,继续处理其它文件。不使用--force,如果表不存在则mysqlimport退出ã€�
· --host=host_nameï¼�-h host_name
将数据导入给定主机上çš�MySQL服务器。默认主机是localhostã€�
· --ignoreï¼�-i
参见--replace选项的描述ã€�
· --ignore-lines=n
忽视数据文件的前n行ã€�
· --localï¼�-L
从本地客户端读入输入文件ã€�
· --lock-tablesï¼�-l
处理文本文件前锁定所有表以便写入。这样可以确保所有表在服务器上保持同步ã€�
· --password[=password]ï¼�-p[password]
当连接服务器时使用的密码。如果使用短选项形式(-p),选项å’� 密码之间不能有空格。如果在命令行中--passwordæˆ�-p选项后面没有 密码值,则提示输入一个密码ã€�
· --port=port_numï¼�-P port_num
用于连接çš�TCP/IP端口号ã€�
· --protocol={TCP | SOCKET | PIPE | MEMORY}
使用的连接协议ã€�
· --replaceï¼�-r
--replaceå’�--ignore选项控制复制唯一键值已有记录的输入记录的处理。如果指å®�--replace,新行替换有相同的唯一键值的已有行。如果指å®�--ignore,复制已有的唯一键值的输入行被跳过。如果不指定这两个选项,当发现一个复制键值时会出现一个错误,并且忽视文本文件的剩余部分ã€�
· --silentï¼�-s
沉默模式。只有出现错误时才输出ã€�
· --socket=pathï¼�-S path
当连æŽ�localhost时使用的套接字文ä»�(为默认主æœ�)ã€�
· --user=user_nameï¼�-u user_name
当连接服务器æ—�MySQL使用的用户名ã€�
· --verboseï¼�-v
冗长模式。打印出程序操作的详细信息ã€�
· --versionï¼�-V
显示版本信息并退出ã€�
这里是一个示例会话,显示如何使用mysqlimportï¼�
shell> mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test
shell> ed
a
100 Max Sydow
101 Count Dracula
.
w imptest.txt
32
q
shell> od -c imptest.txt
0000000 1 0 0 \t M a x S y d o w \n 1 0
0000020 1 \t C o u n t D r a c u l a \n
0000040
shell> mysqlimport --local test imptest.txt
test.imptest: Records: 2 Deleted: 0 Skipped: 0 Warnings: 0
shell> mysql -e 'SELECT * FROM imptest' test
+------+---------------+
| id | n |
+------+---------------+
| 100 | Max Sydow |
| 101 | Count Dracula |
+------+---------------+
mysqlshow客户可用来很快地查找存在哪些数据库,数据库中的表,表中的列或索引ã€�
mysqlshow为一äº�SQL显示语句提供了一个命令行界面。相同的信息可以通过直接使用那些语句获得。例如,你可以从mysql客户程序发出它们。参è§�13.5.4节,“SHOW语法â€�ã€�
象这样调ç”�mysqlshowï¼�
shell> mysqlshow[选项] [db_name [tbl_name [col_name]]]
· 如果没有给出数据库,显示所有匹配的数据库ã€�
· 如果没有给出表,显示数据库中所有匹配的表ã€�
· 如果没有给出列,显示表中所有匹配的列和列类型ã€�
请注意,åœ�MySQL的新版本中,你只能看到有部分权限的那些数据库、表或者列ã€�
如果最后的参数包含shellæˆ�SQL通用字符 (â€�*’、â€�?’、â€�%’或者â€�_â€�),只显示那些名匹配通用字符的名字。如果一个数据库名包含下划线,应该使用一个反斜线(部åˆ�Unix shells需要双反斜线)对它们进行转义,以便得到一个正确的表或列的列表。â€�*’和â€�?’字符被转换ä¸�SQL的â€�%’和â€�_’通用字符。你试图用â€�_’显示一个表的列名时,这可能会造成一些混淆,因为在这种情况下 mysqlshow显示与模式相匹配的表名。这很容易通过在命令行添加一个â€�%’参量来解决ã€�
mysqlshow支持下面的选项ï¼�
· ---helpï¼�-ï¼�
显示一个帮助消息并退出ã€�
· --character-sets-dir=path
字符集安装目录。参è§�5.10.1节,“数据和排序用字符集â€�ã€�
· --compressï¼�-C
压缩所有的客户和服务器之间发送的信息(如果它们都支持压缩)ã€�
· ---debug[=debug_options]ï¼�-# [debug_options]
写调试日志ã€�debug_options字符串通常æ˜�'d:t:o,file_name'ã€�
· --default-character-set=charset
使用charset为默认字符集。参è§�5.10.1节,“数据和排序用字符集â€�ã€�
· --host=host_nameï¼�-h host_name
在给出的主机上连æŽ� MySQL服务器ã€�
· --keys, -k
显示表索引ã€�
· --password[=password]ï¼�-p[password]
连接服务器时使用的密码。如果你使用短选项形式(-p)ï¼�不能在选项å’� 密码之间有一个空æ �。如果在命令行中,你忽略äº�--passwordæˆ�-p选项后面çš� 密码值,将提示你输入一个ã€�
· --port=port_num, -P port_num
连接时使用的TCP/IP端口号ã€�
· --protocol={TCP | SOCKET | PIPE | MEMORY}
连接时使用的协议ã€�
· --show-table-type
显示一列来指示表类型,ä¸�SHOW FULL TABLES语句显示相同ã€�
· --socket=pathï¼�-S path
当连æŽ�localhost时使用的套接字文件(它时默认主机)ã€�
· --status, -i
显示关于每个表的额外信息ã€�
· --user=user_nameï¼�-u user_name
连接服务器时使用çš�MySQL用户名ã€�
· --verboseï¼�-v
冗长模式。打印出程序操作的详细信息。该选项可以多次使用以便增加信息总量ã€�
· --versionï¼�-V
显示版本信息并退出ã€�
myisamlog处理MyISAM日志文件内容ã€�
象这样调ç”�myisamlogï¼�
shell> myisamlog [options] [logfile-name [tbl_name] ...]
常用操作是更新(-u)。如果恢复完成(-rï¼�,所有写和可能的更新以及删除操作完成并且只统计错误。如果没有给出日志文件名,使ç”�myisam.log作为日志文件名。如果在命令行中指定了表名,只更新那些指定的表ã€�
myisamlog理解下面的选项ï¼�
· -?ï¼�-I
显示一个帮助消息并退出ã€�
· -c N
只执è¡�N个命令ã€�
· -f N
指定打开文件的最大数目ã€�
· -F filepath/
TODO
· -i
退出之前显示详细信息ã€�
· -o offset
指定起始偏移量ã€�
· -p N
从路径中移除N个组件ã€�
· -r
恢复ã€�
· -R record-pos-file record-pos
指定记录位置文件和记录位置ã€�
· -u
更新ã€�
· -v
Verbose模式。产生更多输出。该选项可以多次使用以便产生越来越多的输出ã€�
· -w write-file
指定写文件ã€�
· -V
显示版本信息ã€�
对于大多数系统错误,除内部文本信息之外,MySQL还按下面的风格显示的系统错误代码ï¼�
message ... (errno: #)
message ... (Errcode: #)
通过检查系统文档或使用perror工具,可以检查错误代码的意义ã€�
perror为系统错误代码或存储引擎(表处理)错误代码打印其描述信息ã€�
象这样调ç”�perrorï¼�
shell> perror [options] errorcode ...
例如ï¼�
shell> perror13 64
Error code 13: Permission denied
Error code 64: Machine is not on the network
注释ï¼�要想显示MySQL簇的错误代码,用--ndb选项调用perrorï¼�
shell> perror --ndb errorcode
请注意,系统错误信息的含义可能与操作系统有关。在不同的操作系统中错误代码的含义可能不同ã€�
replace实用工具可以及时更改文件或标准输入中的字符串。它首先使用有限状态机来匹配长的字符串。该工具可以用来交换字符串。例如,下面的命令交换给定文ä»�file1å’�file2中的aå’�bï¼�
shell> replace a b b a -- file1 file2 ...
使用--选项来指示字符串-替换列表的结束位置和开始的文件名ã€�
在命令行中的任何文件名被及时修改,因此在转换之前,可能要对源文件进行备份ã€�
如果在命令行中没有指定文件名ï¼�replace读取标准输入并写到标准输出中。在这种情况下,不需è¦�--选项ã€�
replace程序用于msql2mysqlã€�参见25.9.1节,“msql2mysql:转换mSQL程序以用于MySQLâ€�ã€�
replace支持下面的选项ï¼�
· -?ï¼�-I
显示一条帮助消息并退出ã€�
· -# debug_options
写调试日志ã€�debug_options字符串通常æ˜�'d:t:o,file_name'ã€�
· -s
沉默模式。打印出程序执行的少量信息ã€�
· -v
冗长模式。打印出程序执行的大量信息ã€�
· -V
显示版本信息并退出ã€�
mysql_zap杀死匹配某一模式的进程。象这样调用它:
shell> mysql_zap [-signal] [-?Ift] pattern
如果进程çš�ps命令的输出行包含该模式,则认为其匹配。默认情况,mysql_zap对每个进程请求确认。响åº�y则杀死该进程,或è€�q退å‡� mysql_zap。对于其它响应,mysql_zap不试图杀死进程ã€�
如果给出-signal选项,它指定发送到每个进程的信号名或信号编号。否则,mysql_zap首先尝试TERM(信å��15)然后用KILL(信å��9)ã€�
mysql_zap理解下面的额外选项ï¼�
· ---helpï¼�-?ï¼�-I
显示一条帮助消息并退出ã€�
· -f
强制模式ã€�mysql_zap 视图杀死每个匹配的进程而不需要确认ã€�
· -t
测试模式。显示每个进程的信息但不杀死它ã€�
这是MySQL参考手册的翻译版本,关于MySQL参考手册,请访é—�dev.mysql.comã€� 原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的ã€�