標籤:
MySQL 資料庫不僅提供了資料庫的伺服器端應用程式,同時還提供了大量的用戶端工具
程式,如 mysql,mysqladmin,mysqldump 等等,都是大家所熟悉的。雖然有些人對這些工
具的功能都已經比較瞭解了,但是真正能將這些工具程式物盡其用的人可能並不是太多, 或
者知道的不全,也可能並不完全瞭解其中的某種特性。所以在這裡我也簡單地做一個介紹。
1、mysql
相信在所有 MySQL 用戶端工具中,讀者瞭解最多的就是 mysql 了,用的最多的應該也非
他莫屬。mysql 的功能和 Oracle 的 sqlplus 一樣,為使用者提供一個命令列介面來操作管理
MySQL 伺服器。其基本的使用文法這裡就不介紹了,大家只要運行一下“mysql --help”就
會得到如下相應的基本使用協助資訊:
[email protected]:~$ 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 越來越多,操作越來越頻繁的時候,非常容易因為操作的時候
沒有太在意自己當前所處的環境而造成在錯誤的環境執行了錯誤的命令並造成嚴重後果的
情況。如果我們在提示內容中加入了這幾項之後,至少可以更方便的提醒自己當前所處環境 ,
以盡量減少犯錯誤的機率。
我個人的提示符定義: "\\[email protected]\\h : \\d \\r:\\m:\\s> ",顯示效果:
“[email protected] : 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 是否還能正常提供服務
[email protected]:~# mysqladmin -u sky -ppwd -h localhost ping
mysqld is alive
status 命令可以擷取當前 MySQL Server 的幾個基本的狀態值:
[email protected]:~# 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 擷取當前資料庫的連接線程資訊:
[email protected]:~# 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。
mysql用戶端工具