ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
### 第8章:客户端和实用工具程序 有许多不同的MySQL客户端程序可以连接服务器以访问数据库或执行管理任务。也可以使用其它工具。这些程序不与服务器进行通讯但可以执行MySQL相关的操作。 本章简述了这些程序然后详细描述了每个程序。描述了如何调用这些程序和它们理解的选项。调用程序和指定程序选项的总信息参见[第4章:](#)[_MySQL程序概述_](# "Chapter 4. Using MySQL Programs")。 ### 8.1. 客户端脚本和实用工具概述 下面简单列出了MySQL客户端程序和实用工具: ・         myisampack 压缩MyISAM表以产生更小的只读表的一个工具。参见[8.2节,“myisampack:生成压缩、只读MyISAM表”](# "8.2. myisampack ― Generate Compressed, Read-Only MyISAM Tables")。 ・         mysql 交互式输入SQL语句或从文件以批处理模式执行它们的命令行工具。参见[8.3节,“mysql:MySQL命令行工具”](# "8.3. mysql ― The MySQL Command-Line Tool")。 ・         mysqlaccess 检查访问主机名、用户名和数据库组合的权限的脚本。 ・         mysqladmin 执行管理操作的客户程序,例如创建或删除数据库,重载授权表,将表刷新到硬盘上,以及重新打开日志文件。**mysqladmin**还可以用来检索版本、进程,以及服务器的状态信息。参见[8.5节,“mysqladmin:用于管理MySQL服务器的客户端”](# "8.5. mysqladmin ― Client for Administering a MySQL Server")。 ・         mysqlbinlog 从二进制日志读取语句的工具。在二进制日志文件中包含的执行过的语句的日志可用来帮助从崩溃中恢复。参见[8.6节,“mysqlbinlog:用于处理二进制日志文件的实用工具”](# "8.6. mysqlbinlog ― Utility for Processing Binary Log Files")。 ・         mysqlcheck 检查、修复、分析以及优化表的表维护客户程序。参见[8.7节,“mysqlcheck:表维护和维修程序”](# "8.7. mysqlcheck ― A Table Maintenance and Repair Program")。 ・         mysqldump 将MySQL数据库转储到一个文件(例如SQL语句或tab分隔符文本文件)的客户程序。增强版免费软件首先由Igor Romanenko提供。参见[8.8节,“mysqldump:数据库备份程序”](# "8.8. mysqldump ― A Database Backup Program")。 ・         mysqlhotcopy 当服务器在运行时,快速备份MyISAM或ISAM表的工具。参见[8.9节,“mysqlhotcopy:数据库备份程序”](# "8.9. mysqlhotcopy ― A Database Backup Program")。 ・         mysql import 使用LOAD DATA INFILE将文本文件导入相关表的客户程序。参见[8.10节,“mysqlimport:数据导入程序”](# "8.10. mysqlimport ― A Data Import Program")。 ・         mysqlshow 显示数据库、表、列以及索引相关信息的客户程序。参见[8.11节,“mysqlshow:显示数据库、表和列信息”](# "8.11. mysqlshow ― Display Database, Table, and Column Information")。 ・         perror 显示系统或MySQL错误代码含义的工具。参见[8.13节,“perror:解释错误代码”](# "8.13. perror ― Explain Error Codes")。 ・         replace 更改文件中或标准输入中的字符串的实用工具。参见[8.14节,“replace:字符串替换实用工具”](# "8.14. replace ― A String-Replacement Utility")。 MySQL AB还提供了大量GUI工具用于管理和MySQL服务器的其它工作。相关基本信息参见[第4章:](#)[_MySQL程序概述_](# "Chapter 4. Using MySQL Programs")。 每个MySQL程序有许多不同的选项。但每个MySQL程序均提供一个---help选项,可以用来全面描述程序不同的选项。例如,可以试试**mysql---help**。 使用mysqlclient库同服务器进行通讯的MySQL客户使用下面的环境变量: <table border="1" cellpadding="0" id="table1"><tr><td> <p> <span>MYSQL_UNIX_PORT</span></p></td> <td> <p>默认<span>Unix</span>套接字文件;用于连接<span>localhost</span></p></td> </tr><tr><td> <p> <span>MYSQL_TCP_PORT</span></p></td> <td> <p>默认端口号;用于<span>TCP/IP</span>连接</p></td> </tr><tr><td> <p> <span>MYSQL_PWD</span></p></td> <td> <p>默认密码</p></td> </tr><tr><td> <p> <span>MYSQL_DEBUG</span></p></td> <td> <p>调试过程中的调试跟踪选项</p></td> </tr><tr><td> <p> <span>TMPDIR</span></p></td> <td> <p>创建临时表和文件的目录</p></td> </tr></table> 使用MYSQL_PWD不安全。参见[5.8.6节,“使你的密码安全”](# "5.8.6. Keeping Your Password Secure")。 可以在选项文件中或在命令行中指定选项来替换所有标准程序的默认选项值或指定的环境变量的值。参见[4.3节,“指定程序选项”](# "4.3. Specifying Program Options")。 ### 8.2. myisampack:生成压缩、只读MyISAM表 **myisampack**工具可以压缩MyISAM表.MYI**sampack**分别压缩表中的每一列。通常,**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选项。 ### 8.3. mysql:MySQL命令行工具 [ 8.3.1. 选项](#)[8.3.2. ** mysql**命令](#)[ 8.3.3. 怎样从文本文件执行SQL语句](#)[8.3.4. ** mysql**技巧](#) **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 ### 8.3.1. 选项 **mysql**支持下面的选项: ・         ---help,-? 显示帮助消息并退出。 ・         --batch,-B 打印结果,使用tab作为列间隔符,每个行占用新的一行。使用该选项,则**mysql**不使用历史文件。 ・         --character-sets -dir=_path_ 字符集的安装目录。参见[5.10.1节,“数据和排序用字符集”](# "5.10.1. The Character Set Used for Data and Sorting")。 ・         --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_ 使用_charset_as作为默认字符集。参见[5.10.1节,“数据和排序用字符集”](# "5.10.1. The Character Set Used for Data and Sorting")。 ・         --execute=_statement_, -e _statement_ 执行语句并退出。默认输出格式与用--batch产生的相同。[4.3.1节,“在命令行上使用选项”](# "4.3.1. Using Options on the Command Line")中提供了一些例子。 ・         --force,-f 即使出现一个SQL错误仍继续。 ・         --host=_host_name_,-h _host_name_ 连接给定主机上的MySQL服务器。 ・         --html,-H 产生HTML输出。 ・         --ignore-space,-i 忽视函数名后面的空格。其结果描述参见[5.3.2节,“SQL服务器模式”](# "5.3.2. The Server SQL Mode")中的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**命令”](# "8.3.2. mysql Commands")中详细讨论了输出分页。 ・         --no-tee 不将输出复制到文件中。在[8.3.2节,“**mysql**命令”](# "8.3.2. mysql Commands")中详细讨论了Tee文件。 ・         --one--database,-O 忽视除了为命令行中命名的默认数据库的语句。可以帮助跳过对二进制日志中的其它数据库的更新。 ・         --pager[=_command_] 使用给出的命令来分页查询输出。如果该命令被删除,默认分页器为PAGER环境变量的值。合法pagers是**less、more、cat [>filename]**等等。该选项只在Unix中工作。不能以批处理模式工作。在[8.3.2节,“**mysql**命令”](# "8.3.2. mysql Commands")中详细讨论了输出分页。 ・         --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**命令”](# "8.3.2. mysql Commands")中描述了提示中可以包含的具体顺序。 ・         --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**技巧”](# "8.3.4. mysql Tips")。 ・         --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**命令”](# "8.3.2. mysql Commands")中详细讨论了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 只需要执行一次。 ### 8.3.2. **mysql**命令 **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>提示符可以重新配置。定义提示符的字符串可以包含下面的特殊序列: <table border="1" cellpadding="0" id="table2"><tr><td> <p><strong><span>选项</span></strong></p></td> <td> <p><strong><span>描述</span></strong></p></td> </tr><tr><td> <p> <span>\v</span></p></td> <td> <p>服务器版本</p></td> </tr><tr><td> <p> <span>\d</span></p></td> <td> <p>当前的数据库</p></td> </tr><tr><td> <p> <span>\h</span></p></td> <td> <p>服务器主机</p></td> </tr><tr><td> <p> <span>\p</span></p></td> <td> <p>当前的<span>TCP/IP</span>端口或套接字文件</p></td> </tr><tr><td> <p> <span>\u</span></p></td> <td> <p>你的用户名</p></td> </tr><tr><td> <p> <span>\U</span></p></td> <td> <p>你的全<span><i><span>user_name</span></i><span>@<i>host_name</i></span></span>账户名</p></td> </tr><tr><td> <p> <span>\\</span></p></td> <td> <p>‘<span>\</span>’反斜线字符</p></td> </tr><tr><td> <p> <span>\n</span></p></td> <td> <p>新行字符</p></td> </tr><tr><td> <p> <span>\t</span></p></td> <td> <p><span>Tab</span>字符</p></td> </tr><tr><td> <p> <span>\ </span> </p></td> <td> <p>空格<span>(</span>反斜线后面的空格<span>)</span></p></td> </tr><tr><td> <p> <span>\_</span></p></td> <td> <p>空格</p></td> </tr><tr><td> <p> <span>\R</span></p></td> <td> <p>当前的时间,<span>24-</span>小时军用时间<span>(0-23)</span></p></td> </tr><tr><td> <p> <span>\r</span></p></td> <td> <p>当前的时间,标准<span>12-</span>小时<span>(1-12)</span></p></td> </tr><tr><td> <p> <span>\m</span></p></td> <td> <p>当前时间的分钟</p></td> </tr><tr><td> <p> <span>\y</span></p></td> <td> <p>当前的年,两位</p></td> </tr><tr><td> <p> <span>\Y</span></p></td> <td> <p>当前的年,四位</p></td> </tr><tr><td> <p> <span>\D</span></p></td> <td> <p>当前的日期</p></td> </tr><tr><td> <p> <span>\s</span></p></td> <td> <p>当前时间的秒</p></td> </tr><tr><td> <p> <span>\w</span></p></td> <td> <p>当前周的天,<span>3</span>字符格式<span>(Mon</span>,<span>Tue</span>,<span>...)</span></p></td> </tr><tr><td> <p> <span>\P</span></p></td> <td> <p><span>am/pm</span></p></td> </tr><tr><td> <p> <span>\o</span></p></td> <td> <p>当前的月,数字格式</p></td> </tr><tr><td> <p> <span>\O</span></p></td> <td> <p>当前的月,<span>3</span>字符格式<span>(Jan</span>,<span>Feb</span>,<span>...)</span></p></td> </tr><tr><td> <p> <span>\c</span></p></td> <td> <p>随发出的每个语句递增的计数</p></td> </tr><tr><td> <p> <span>\S</span></p></td> <td> <p>分号</p></td> </tr><tr><td> <p> <span>\'</span></p></td> <td> <p>单引号</p></td> </tr><tr><td> <p> <span>\"</span></p></td> <td> <p>双引号</p></td> </tr></table> ‘\’后面跟随的其它字母则变为该字母。 如果不用任何参量指定提示命令,**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节,“使用选项文件”](# "4.3.2. Using Option Files"))。如果使用单反斜线,会遇到问题。例如,\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> ### 8.3.3. 怎样从文本文件执行SQL语句 **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节,“在批处理模式**下使用my**sql”](# "3.5. Using mysql in Batch Mode")。 ### 8.3.4. **mysql**技巧 [ 8.3.4.1. 垂直显示查询结果](#)[ 8.3.4.2. 使用--safe-updates选项](#)[ 8.3.4.3. 禁用mysql自动连**接**](#) 该节描述了可以帮助你更有效使用**mysql的一些**技术。 #### 8.3.4.1. 垂直显示查询结果 一些查询结果如果垂直显示而不用通常的水平表格式显示,则更容易读取。用\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: monty@no.spam.com mail_to: "Thimble Smith" <tim@no.spam.com> 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) #### 8.3.4.2. 使用--safe-updates选项 对于新手,有一个有用的启动选项--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语法”](# "13.5.3. SET Syntax")。 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 #### 8.3.4.3. 禁用mysql自动连**接** 如果**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**客户程序。 ### 8.4. mysqlaccess:用于检查访问权限的客户端 **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错误。 ### 8.5. mysqladmin:用于管理MySQL服务器的客户端 **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中的密码哈希处理”](# "5.7.9. Password Hashing in 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语法”](# "13.5.4.16. SHOW PROCESSLIST Syntax"))。 ・         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节,“慢速查询日志”](# "5.11.4. The Slow Query Log")。 ・         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节,“数据和排序用字符集”](# "5.10.1. The Character Set Used for Data and Sorting")。 ・         --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_ 使用_charset_as作为默认字符集。参见[5.10.1节,“数据和排序用字符集”](# "5.10.1. The Character Set Used for Data and Sorting")。 ・         --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_语法来设置变量。然而,现在不赞成该语法,并且不再使用。 ### 8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 服务器生成的二进制日志文件写成二进制格式。要想检查这些文本格式的文件,应使用**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节,“二进制日志”](# "5.11.3. The Binary Log")中详细讨论了二进制日志。 **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节,“数据库备份”](# "5.9.1. Database Backups")): 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安全问题``”](# "5.6.4. Security Issues with 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