日期:2014-05-16  浏览次数:20894 次

mysql命令行的一些小技巧

????? 虽然现在经常使用图形化工具连接MySQL进行管理,但是总会有一天我们需要使用MySQL命令行。因此知道一些小技巧对工作还是很有帮助的。

?

注意:下边这些命令只在Unix/Linux下有效。

?

使用pager

????? 很多图形化工具会自动对结果进行分页,十分方便。但是在MySQL命令行下却不是这样:它直接输出全部结果。这样十分麻烦,不过有个简单的方法,使用 pager 命令可以解决这个问题:

?

mysql> pager more
PAGER set to 'more'
mysql> select title from sakila.film;
+-----------------------------+
| title                       |
+-----------------------------+
| ACADEMY DINOSAUR            |
| ACE GOLDFINGER              |
| ADAPTATION HOLES            |
| AFFAIR PREJUDICE            |
| AFRICAN EGG                 |
| AGENT TRUMAN                |
| AIRPLANE SIERRA             |
| AIRPORT POLLOCK             |
| ALABAMA DEVIL               |
| ALADDIN CALENDAR            |
| ALAMO VIDEOTAPE             |
| ALASKA PHANTOM              |
| ALI FOREVER                 |
| ALICE FANTASIA              |
| ALIEN CENTER                |
| ALLEY EVOLUTION             |
| ALONE TRIP                  |
| ALTER VICTORY               |
| AMADEUS HOLY                |
--Plus--

????? 另外一个关于 pager 的实例,如果你想估计一下InnoDB redo log的大小,需要抓取一段时间内Log Sequence Number的数据。不过SHOW ENGINE INNODB STATUS一行输出的结果太多了,不想每次都需要翻到想要看的位置,可以借助 pager 命令解决这个问题:

mysql> pager grep sequence
PAGER set to 'grep sequence'
mysql> show engine innodb status\Gselect sleep(60);show engine innodb status\G
Log sequence number 380166807992
1 row in set (0.41 sec)

1 row in set (1 min 0.00 sec)

Log sequence number 380170274979
1 row in set (0.00 sec)

?????? 当你想要禁用这个分页的功能时,简单的执行:

mysql> pager
Default pager wasn't set, using stdout.

?

使用edit

????? 当要优化一个查询的时候,经常需要修改查询的内容,有的时候使用一个文件编辑器要比直接在命令行下修改方便的多,这个时候,我们可以使用 edit 这个命令。

????? 我们先看一下下边这个查询:

mysql> select count(*) from film left join film_category using(film_id) left join category using(category_id) where name='Music';

????? 现在我们想把 left join 的语句修改为 inner join,并把SQL语句变成大写的。用手工修改的方法十分麻烦,这时个以简单的执行 edit:

?

mysql> edit

????? 然后就会打开默认的文本编辑器,里边是上一次执行的查询语句。默认的文本编辑器是vi,现在就可以使用vi的功能而不仅限于MySQL命令行了。

当你编辑完成后,保存并退出编辑器:此时返回到MySQL命令行下,这时可以键入 ; 或者 \G 来执行这个查询

?

使用tee

????? 在一些情况下,如果你想测试一些命令来写一份文档,或者正处于一次紧急情况中,希望可以记录下所执行的查询。MySQL命令行提供了 tee 这个命令,可以把输入和输出记录到一个文件中,十分像Unix中的tee命令:

?

mysql> tee queries.log
Logging to file 'queries.log'
mysql> use sakila
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select count(*) from sakila;
ERROR 1146 (42S02): Table 'sakila.sakila' doesn't exist
mysql> select count(*) from film;
+----------+
| count(*) |
+----------+
|     1000 |
+----------+
1 row in set (0.00 sec)

mysql> exit

????? 现在你可以查看一下 queries.log 这个文件,可以得到一份当前session内空的复制。

?

结论

????? MySQL命令行并不像很多图形化管理工具那么好用,但时如果你知道一些隐藏的功能,它会变得更加强大。如果你很喜欢这些小技巧,我会对这些被忽略又实用的小技巧再写另一篇。

?

原文地址: http://www.mysqlperformanceblog.com/2012/12/21/be-productive-with-the-mysql-command-line/

?

?

?

?