MySQL 数据库不仅提供了数据库的服务器端应用程序,同时还提供了大量的客户端工具
程序,如 mysql,mysqladmin,mysqldump 等等,都是大家所熟悉的。虽然有些人对这些工
具的功能都已经比较了解了,但是真正能将这些工具程序物尽其用的人可能并不是太多, 或
者知道的不全,也可能并不完全了解其中的某种特性。所以在这里我也简单地做一个介绍。
1、mysql
相信在所有 MySQL 客户端工具中,读者了解最多的就是 mysql 了,用的最多的应该也非
他莫属。mysql 的功能和 Oracle 的 sqlplus 一样,为用户提供一个命令行接口来操作管理
MySQL 服务器。其基本的使用语法这里就不介绍了,大家只要运行一下“mysql --help”就
会得到如下相应的基本使用帮助信息:
sky@sky:~$ mysql --help
mysql Ver 14.14 Distrib 5.1.26-rc, for pc-linux-gnu (i686) using EditLine
wrapper
Copyright (C) 2000-2008 MySQL AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
Usage: mysql [OPTIONS] [database]
-?, --help Display this help and exit.
... ...
-e, --execute=name Execute command and quit. (Disables --force and history
file)
-E, --vertical Print the output of a query (rows) vertically.
... ...
-H, --html Produce HTML output.
-X, --xml Produce XML output
... ...
--prompt=name Set the mysql prompt to this value.
... ...
--tee=name Append everything into outfile. See interactive help (h)
also. Does not work in batch mode. Disable with
--disable-tee. This option is disabled by default.
... ...
-U, --safe-updates Only allow UPDATE and DELETE that uses keys.
--select_limit=# Automatic limit for SELECT when using --safe-updates
--max_join_size=# Automatic limit for rows in a join when using
--safe-updates
... ...
--show-warnings Show warnings after every statement.
... ...
上面的内容仅仅只是输出的一部分,省略去掉了大家最常用的一些参数(因为大家应该
已经很熟悉了),留下了部分个人认为可能不是太经常用到,但是在有些情况下却能给我们
带来意料之外的惊喜的一些参数选项。
首先看看“-e, --execute=name”参数,这个参数是告诉 mysql,我只要执行“-e”后
面的某个命令,而不是要通过 mysql 连接登录到 MySQL Server 上面。此参数在我们写一些
基本的 MySQL 检查和监控的脚本中非常有用,我个人就经常在脚本中使用到他。
如果在连接时候使用了 “-E, --vertical”参数,登入之后的所有查询结果都将以纵列
显示,效果和我们在一条 query 之后以 “G”结尾一样,这个参数的使用场景可能不是特别
多。
“-H, --html”与“-X, --xml”这两个参数很有意思的,在启用这两个参数之后, select
出来的所有结果都会按照“Html”与“Xml”格式来输出,在有些场合之下,比如希望 Xml
或者 Html 文件格式导出某些报表文件的时候,是非常方便的。
“--prompt=name”参数对于做运维的人来说是一个非常重要的参数选项,其主要功能
是定制自己的 mysql 提示符的显示内容。在默认情况下,我们通过 mysql 登入到数据库之后 ,
mysql 的提示符只是一个很简单的内容”mysql>“,没有其他任何附加信息。非常幸运的是
mysql 通过“--prompt=name”参数给我们提供了自定义提示信息的办法,可以通过配置显
示登入的主机地址,登录用户名,当前时间,当前数据库 schema,MySQL Server 的一些信
息等等。我个人强烈建议将登录主机名,登录用户名和所在的 schema 这三项加入提示内容,
因为当大家手边管理的 MySQL 越来越多,操作越来越频繁的时候,非常容易因为操作的时候
没有太在意自己当前所处的环境而造成在错误的环境执行了错误的命令并造成严重后果的
情况。如果我们在提示内容中加入了这几项之后,至少可以更方便的提醒自己当前所处环境 ,
以尽量减少犯错误的概率。
我个人的提示符定义: "\u@\h : \d \r:\m:\s> ",显示效果:
“sky@localhost : test 04:25:45>”
“--tee=name”参数也是对运维人员非常有用的参数选项,用来告诉 mysql,将所有输
入和输出内容都记录进文件。在我们一些较大维护变更的时候,为了方便被查,最好是将整
个操作过程的所有输入和输出内容都保存下来。有了 “--tee=name”参数,就再也不用通过
copy 屏幕来保存操作过程了。
“-U, --safe-updates”,“--select_limit=#”和“--max_join_size=#”三个参数都
是出于性能相关考虑的参数。使用 “-U, --safe-updates”参数之后,将禁止所有不能使用
索引的 update 和 delete 操作的请求, “--select_limit=#”的使用前提是有“-U, --safe-updates”参数,功能是限制查询记录的条数, “--max_join_size=#”也需要与 “-U, --safe-updates”一起使用,限制参与 join 的最大记录数。
“--show-warnings”参数作用是在执行完每一条 query 之后都会自动执行一次“show
warnings”,显示出最后一次 warning 的内容。
上面仅仅介绍了部分不是太常使用但是很有特点的少数几个参数选项,实际上 mysql
程序支持非常多的参数选项,有其自身的参数,也有提交给 MySQL Server 的。mysql 的所
有参数选项都可以写在 MySQL Server 启动参数文件(my.cnf)的[mysql]参数 group 中,还
有部分连接选项参数会从[client]参数 group 中读取,这样很多参数就可以不用在每次执行
mysql 的时候都手工输入,而由 mysql 程序自己自动从 my.cnf 文件 load 这些参数。
如果读者朋友希望对 mysql 其他参数选项或者 mysql 的其他更国有图有更深入的了解,
可以通过 MySQL 官方参考手册查阅,也可以通过执行 “mysql --help”得到帮助信息之后通
过自行实验来做进一步的深刻认识。当然如果您是一位基本能看懂 c 语言的朋友,那么您完
全可以通过 mysql 程序的源代码来发现其更多有趣的内容。
2、mysqladmin
Usage: mysqladmin [OPTIONS] command command ...
mysqadmin,顾名思义,提供的功能都是与 MySQL 管理相关的各种功能。如 MySQL Server
状态检查,各种统计信息的 flush,创建 /删除数据库,关闭 MySQL Server 等等。 mysqladmin
所能做的事情,虽然大部分都可以通过 mysql 连接登录上 MySQL Server 之后来完成,但是
大部分通过 mysqladmin 来完成操作会更简单更方便。这里我将介绍一下自己经常使用到的
几个常用功能:
ping 命令可以很容易检测 MySQL Server 是否还能正常提供服务
sky@sky:~# mysqladmin -u sky -ppwd -h localhost ping
mysqld is alive
status 命令可以获取当前 MySQL Server 的几个基本的状态值:
sky@sky:~# mysqladmin -u sky -ppwd -h localhost status
Uptime: 20960 Threads: 1 Questions: 75 Slow queries: 0 Opens: 15 Flush
tables: 1 Open tables: 9 Queries per second avg: 0.3
processlist 获取当前数据库的连接线程信息:
sky@sky:~# mysqladmin -u sky -ppwd -h localhost processlist
+----+------+-----------+----+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+----+---------+------+-------+------------------+
| 48 | sky | localhost | | Query | 0 | | show processlist |
+----+------+-----------+----+---------+------+-------+------------------+
上面的这三个功能是我在自己的一些简单监控脚本中经常使用到的,虽然得到的信息还
是比较有限,但是对于完成一些比较基本的监控来说,已经足够胜任了。此外,还可以通过
mysqladmin 来 start slave 和 stop slave,kill 某个连接到 MySQL Server 的线程等等。
3、mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
mysqldump 这个工具我想大部分读者可能都比较熟悉了,其功能就是将 MySQL Server
中的数据以 SQL 语句的形式从数据库中 dump 成文本文件。虽然 mysqldump 是做为 MySQL 的
一种逻辑备份工具为大家所认识,但我个人觉得称他为 SQL 生成导出工具更合适一点,因为
通过 mysqldump 所生成的文件,全部是 SQL 语句,包括数据库和表的创建语句。当然,通过
给 mysqldump 程序加 “-T”选项参数之后,可以生成非 SQL 形式的指定给是的文本文件。 这
个功能实际上是调用了 MySQL 中的“select * into OUTFILE from ...”语句而实现。也可
以通过 “-d,--no-data”仅仅生成结构创建的语句。在声称 SQL 语句的时候,字符集设置这
一项也是比较关键的,建议每次执行 mysqldump 程序的时候都通过尽量做到“--default-character-set=name”显式指定字符集内容,以防止以错误的字符集生成不可用的内容。
mysqldump 所生成的 SQL 文件可以通过 mysql 工具执行。
4、mysqlimport
Usage: mysqlimport [OPTIONS] database textfile ...
mysqlimport 程序是一个将以特定格式存放的文本数据(如通过“select * into
OUTFILE from ...”所生成的数据文件)导入到指定的 MySQL Server 中的工具程序,比如
将一个标准的 csv 文件导入到某指定数据库的指定表中。mysqlimport 工具实际上也只是
“load data infile”命令的一个包装实现。
5、mysqlbinlog
Usage: mysqlbinlog [OPTIONS] log-files
mysqlbinlog 程序的主要功能就是分析 MySQL Server 所产生的二进制日志(也就是大
家所熟知的 binlog)。当我们希望通过之前备份的 binlog 做一些指定时间之类的恢复的时
候,mysqlbinlog 就可以帮助我们找到恢复操作需要做哪些事情。通过 mysqlbinlog,我们
可以解析出 binlog 中指定时间段或者指定日志起始和结束位置的内容解析成 SQL 语句,并
导出到指定的文件中,在解析过程中,还可以通过指定数据库名称来过滤输出内容。
6、mysqlcheck
Usage: mysqlcheck [OPTIONS] database [tables]
OR mysqlcheck [OPTIONS] --databases DB1 [DB2 DB3...]
OR mysqlcheck [OPTIONS] --all-databases
mysqlcheck 工具程序可以检查(check),修复( repair),分析( analyze)和优化
(optimize)MySQL Server 中的表,但并不是所有的存储引擎都支持这里所有的四个功能,
像 Innodb 就不支持修复功能。实际上, mysqlcheck 程序的这四个功能都可以通过 mysql 连
接登录到 MySQL Server 之后来执行相应命令完成完全相同的任务。
7、myisamchk
Usage: myisamchk [OPTIONS] tables[.MYI]
功能有点类似“mysqlcheck -c/-r”,对检查和修复 MyISAM 存储引擎的表,但只能对
MyISAM 存储引擎的索引文件有效,而且不用登录连接上 MySQL Server 即可完成操作。
8、myisampack
Usage: myisampack [OPTIONS] filename ...
对 MyISAM 表进行压缩处理,以缩减占用存储空间,一般主要用在归档备份的场景下,
而且压缩后的 MyISAM 表会变成只读,不能进行任何修改操作。当我们希望归档备份某些历
史数据表,而又希望该表能够提供较为高效的查询服务的时候,就可以通过 myisampack 工
具程序来对该 MyISAM 表进行压缩,因为即使虽然更换成 archive 存储引擎也能够将表变成
只读的压缩表,但是 archive 表是没有索引支持的,而通过压缩后的 MyISAM 表仍然可以使
用其索引。
9、mysqlhotcopy
Usage: mysqlhotcopy db_name[./table_regex/] [new_db_name | directory]
mysqlhotcopy 和其他的客户端工具程序不太一样的是他不是 c(或者 c++)程序编写的 ,
而是一个 perl 脚本程序,仅能在 Unix/Linux 环境下使用。他的主要功能就是对 MySQL 中
的 MyISAM 存储引擎的表进行在线备份操作,其备份操作实际上就是通过对数据库中的表进
行加锁,然后复制其结构,数据和索引文件来完成备份操作,当然,也可以通过指定 “--noindices”告诉 mysqlhotcopy 不需要备份索引文件。
10、其他工具
除了上面介绍的这些工具程序之外, MySQL 还有自带了其他大量的工具程序,如针对离
线 Innodb 文件做 checksum 的 innochecksum ,转换 mSQL C API 函数的 msql2mysql ,
dumpMyISAM 全文索引的 myisam_ftdump,分析处理 slowlog 的 mysqldumpslow,查询 mysql
相关开发包位置和 include 文件位置的 mysql_config, 向 MySQL AB 报告 bug 的 mysqlbug,
测 试 套 件 mysqltest 和 mysql_client_test , 批 量 修 改 表 存 储 引 擎 类 型 的
mysql_convert_table_format,能从更新日志中提取给定匹配规则的 query 语句的
mysql_find_rows,更改 MyIsam 存储引擎表后缀名的 mysql_fix_extensions,修复系统表
的 mysql_fix_privilege_tables,查看数据库相关对象结构的 mysqlshow,MySQL 升级工具
mysql_upgrade,通过给定匹配模式来 kill 客户端连接线程的 mysql_zap,查看错误号信息
的 perror,文本替换工具 replace,等 等一系列工具程序可供我们使用。如果您希望在 MySQL
源代码的基础上做一些自己的修改,如修改 MyISAM 存储引擎的时候,可以利用 myisamlog
来进行跟踪分析 MyISAM 的 log。