MySQL的客戶端命令列工具,有許多方便使用者的特性,某些方面甚至可以說比Oracle的sqlplus更人性化。當然從整體來說,還是sqlplus比較方便些,這麼說或許是我對sqlplus更熟悉吧。這裡記錄下MySQL命令列幾個比較常用的特性。
1.使用G按行垂直顯示結果
如果一行很長,需要這行顯示的話,看起結果來就非常的難受。在SQL語句或指令後面使用G而不是分號結尾,可以將每一行的值垂直輸出。這個可能也是大家對於MySQL最熟悉的差別於其他資料庫工具的一個特性了。
mysql> select * from db_archivelog\G *************************** 1. row *************************** id: 1 check_day: 2008-06-26 db_name: TBDB1 arc_size: 137 arc_num: 166 per_second: 1.6 avg_time: 8.7
2.使用pager設定顯示方式
如果select出來的結果集超過幾個螢幕,那麼前面的結果一晃而過無法看到。使用pager可以設定呼叫os的more或less等顯示查詢結果,和在os中使用more或less查看大檔案的效果一樣。
使用more
mysql> pager more PAGER set to ‘more’ mysql> P more PAGER set to ‘more’
使用less
mysql> pager less PAGER set to ‘less’ mysql> P less PAGER set to ‘less’
還原成stdout
mysql> nopager PAGER set to stdout
3.使用tee保存運行結果到文件
這個類似於sqlplus的spool功能,可以將命令列中的結果保存到外部文件中的結果保存到外部文件中。如果指定已經存在的文件,則結果會附加到文件中。
mysql> tee output.txt Logging to file ‘output.txt’
或
mysql> T output.txt Logging to file ‘output.txt’ mysql> notee Outfile disabled.
或
mysql> t Outfile disabled
4.執行OS命令
mysql> system uname Linux mysql> ! uname Linux
5.執行SQL檔案
mysql> source test.sql +—————-+ | current_date() | +—————-+ | 2008-06-28 | +—————-+ 1 row in set (0.00 sec)
或
mysql> . test.sql +—————-+ | current_date() | +—————-+ | 2008-06-28 | +—————-+ 1 row in set (0.00 sec)
其他指令。
繼續上面的話題,介紹mysql命令列的一些小技巧
1.以html格式輸出結果
使用mysql客戶端的參數–html或-T,則所有SQL的查詢結果會自動產生為html的table碼
$ mysql -uroot –html Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 3286 Server version: 5.1.24-rc-log MySQL Community Server (GPL) Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer. mysql> select * from test.test; 2 rows in set (0.00 sec)
2.以xml格式輸出結果
跟上面差不多,使用–xml或-X選項,可以將結果輸出為xml格式
$ mysql -uroot –xml Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 3287 Server version: 5.1.24-rc-log MySQL Community Server (GPL) Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer. mysql> select * from test.test; 2 rows in set (0.00 sec)
3.修改命令提示字元
使用mysql的–prompt=選項,或進入mysql命令列環境後使用prompt命令,都可以修改提示符
mysql> prompt u@d> PROMPT set to ‘u@d>’ root@(none)>use mysql 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 root@mysql>
其中u表示當前連接的用戶,d表示當前連接的數據庫,其他更多的可選項可以參考man mysql
這裡再介紹下通過配置文件來設定MySQL命令列的這些參數。
透過/etc/my.cnf設定檔的[mysql]部分,可以設定MySQL命令列的一些運行參數。例如:
[mysql] prompt=\u@\d \r:\m:\s> pager=’less -S’ tee=’/tmp/mysql.log’
透過prompt設定顯示使用者名,目前資料庫和目前時間,注意在設定檔裡最好使用雙斜線:
root@poster 10:26:35>
透過pager設定使用less來顯示查詢結果,-S表示截斷超過螢幕寬度的行,一行太長MySQL的顯示格式就顯得很亂,如果要看完整的行,建議使用G將行垂直輸出。當然,你也可以加入更多less的參數來控制輸出。
tee則將MySQL執行的所有輸出保存到一個日誌檔案中,即使使用less -S截斷了超長行,在日誌中還是會記錄整個的結果,另外,前面透過prompt設定了當前時間顯示,這樣也便於在日誌檔案中查看每次操作的時間。由於tee的結果是附加到文件中的,因此日誌檔案需要定期清除。