第4章:MySQL程式概述

目錄

4.1. MySQL程式概述
4.2. 使用MySQL程式
4.3. 指定程式選項
4.3.1. 在命令行上使用選項
4.3.2. 使用選項檔案
4.3.3. 用環境變數指定選項
4.3.4. 使用選項設置程式變數

本章簡要概述了MySQL AB提供的命令行程式,並討論了運行這些程式時如何指定選項。大多數程式具有其操作專用的選項,但指定選項的語法都近似。後面的幾章更加詳細地描述了各個程式,包括它們識別的選項。

MySQL AB還提供了3GUI客戶程式供MySQL伺服器使用:

·         MySQL管理器:該工具用於管理MySQL伺服器、資料庫、資料表以及用戶。

·         MySQL查詢瀏覽器:該圖形工具由MySQL AB提供,用於建立、執行以及最佳化對MySQL資料庫的查詢。

·         MySQL移植工具包:該工具可以幫助您將計劃和數據從其它關係資料庫管理系統移植到MySQL

4.1. MySQL程式概述

MySQL AB提供了幾種類型的程式:

·         MYSQL伺服器和伺服器啟動指令:

o        mysqldMySQL伺服器

o        mysqld_safemysql.servermysqld_multi是伺服器啟動指令

o        mysql_install_db初始化數據目錄和初始資料庫

第5章:資料庫管理中詳細討論了這些程式。

·         訪問伺服器的客戶程式:

o        mysql是一個命令行客戶程式,用於交互式或以批處理模式執行SQL語句。

o        mysqladmin是用於管理功能的客戶程式。

o        mysqlcheck執行資料表維護操作。

o        mysqldumpmysqlhotcopy負責資料庫備份。

o        mysqlimport導入數據檔案。 

o        mysqlshow顯示訊息資料庫和資料表的相關訊息。

第8章:客戶端和實用工具程式中詳細討論了這些程式。

·         獨立於伺服器操作的工具程式:

o        myisamchk執行資料表維護操作。

o        myisampack產生壓縮、只讀的資料表。

o        mysqlbinlog是處理二進制日誌檔案的實用工具。

o        perror顯示錯誤代碼的含義。

第5章:資料庫管理中詳細討論了myisamchk。在第8章:客戶端和實用工具程式中詳細討論了其它程式。

大多數MySQL分發包括上述的全部程式,只是不包含那些與平台相關的程式。(例如,在Windows中不使用伺服器啟動指令)不同的只是RPM分發更加具體化。可能一個RPM是伺服器分發,另一個RPM是客戶程式分發等等。如果您丟失了一個或多個程式,要想查閱關於分發類型和它們所包含內容的訊息,參見第2章:安裝MySQL。也可能需要安裝一些其它內容。

4.2. 使用MySQL程式

要想從命令行使用MySQL程式(即從shell或命令提示),應輸入程式名,並隨後輸入指導操作發的選項或其它參量。下面的命令顯示了一些程式使用的例子。「shell>」資料表示命令解釋符提示;並不是輸入的部分。您所看見的具體提示取決於命令解釋符。典型提示符:shbash$cshtcsh%Windows command.comcmd.exeC:\>

shell> mysql test
shell> mysqladmin extended-status variables
shell> mysqlshow --help
shell> mysqldump --user=root personnel

以破折號開始的參數為選項參量。它們通常指定程式與伺服器的連接類型或影響其操作模式。關於選項語法的描述參見4.3節,「指定程式選項」

非選項參數(不以破折號開始的參量)可以為程式提供更詳細的訊息。例如,mysql程式將第一個非選項參量解釋為資料庫名,因此命令 mysql test資料表示您想要使用test資料庫。

後面的章節描述了具體的程式,資料表示程式可以理解的選項,並描述了其它非選項參量的含義。

部分選項對部分程式是通用的。最常用的是指定連接參數的--host--user--password選項。它們指示MySQL伺服器運行的主機和MySQL帳號的帳號和 密碼。所有MySQL客戶程式可以理解這些選項;它們允許您指定連接哪個伺服器,以及在該伺服器上使用的 帳號。

您也許會發現需要使用MySQL程式安裝的bin目錄的路徑名來使用MySQL程式。如果您試圖不在bin目錄下運行MySQL程式,可能會遇到「程式未找到」錯誤。為了更方便地使用MySQL,可以將bin目錄的路徑名新增到PATH環境變數中。然後運行程式時只需要輸入程式名,而不需要輸入整個路徑名。

關於設置PATH的指令的命令解釋符請查閱相關文檔。設置環境變數的語法與解釋符有關。

4.3. 指定程式選項

可以用幾種方式提供MySQL程式的選項:

·         在命令行中在程式名後面提供。這對於具體程式使用時使用的選項很普遍。

·         在程式啟動時讀取的選項檔案中設置。這對於每次程式運行時使用的選項很普遍。

·         在環境變數中設置。這對每次程式運行時所使用的選項很有用,儘管實際上最常用選項檔案。(5.12.2節,「在Unix中運行多個伺服器」中討論了環境變數會很有幫助的一種情況。描述了使用這些變數來指定伺服器和客戶程式的TCP/IP端口號和Unix套接字檔案的各種技術)

MySQL程式首先檢查環境變數,然後檢查選項檔案,然後檢查命令行來確定給出了哪些選項。如果多次指定一個選項,最後出現的選項佔先。這說明環境變數具有最低的優先級,命令行選項具有最高優先級。

可以在選項檔案中指定程式選項的預設值來讓MySQL程式處理各選項。不需要在每次運行程式時輸入選項,但可以根據需要通過命令行選項來覆蓋預設值。

4.3.1. 在命令行上使用選項

在命令行中指定的程式選項遵從下述規則:

·         在命令名後面緊跟選項。

·         選項參量以一個和兩個破折號開始,取決於它具有短名還是長名。許多選項有兩種形式。例如,-?--help是指導MySQL程式顯示幫助消息的選項的短名和長名。

·         選項名對大小寫敏感。-v-V均有效,但具有不同的含義。(它們是--verbose--version選項的短名)

·         部分選項在選項名後面緊隨選項值。例如,-h localhost--host=localhost資料表示客戶程式的MySQL伺服器主機。選項值可以告訴程式MySQL伺服器運行的主機名。

·         對於帶選項值的長選項,通過一個『=』將選項名和值隔離開來。對於帶選項值的短選項,選項值可以緊隨選項字母后面,或者二者之間可以用一個空格隔開。(-hlocalhost-h localhost是等效的)該規則的例外情況是指定MySQL密碼的選項。該選項的形式可以為--password=pass_val--password。在後一種情況(未給出 密碼值),程式將提示輸入密碼。也可以給出密碼選項,短形式為-ppass_val-p。然而,對於短形式,如果給出了 密碼值,必須緊跟在選項後面,中間不能插入空格。這樣要求的原因是如果選項後面有空格,程式沒有辦法來告知後面的參量是 密碼值還是其它某種參量。因此,下面兩個命令的含義完全不同:

·                shell> mysql -ptest
·                shell> mysql -p test

第一個命令讓mysql使用密碼test,但沒有指定預設資料庫。第二個命令讓mysql提示輸入 密碼並使用test作為預設資料庫。

部分選項控制可以開關的行為。例如,mysql客戶端支援--column-names選項,確定是否在查詢結果開頭顯示一行欄目名。預設情況,該選項被啟用。但是可能在某些情況下您想要禁用它,例如將mysql的輸出發送到另一個只希望看到數據而不希望看到開始的標題行的程式中。

要想禁用列名,可以使用下面的形式來指定選項:

--disable-column-names
--skip-column-names
--column-names=0

--disable--skip前綴與=0後綴的效果相同:它們均關閉選項。

可以用下述方法「啟用」選項:

--column-names
--enable-column-names
--column-names=1

如果選項有前綴--loose,如果程式未識別出選項不會提示錯誤退出,但是會發出一條警告:

shell> mysql --loose-no-such-option
mysql: WARNING: unknown option '--no-such-option'

當您從安裝了多個MySQL的同一台機器上運行程式時,--loose前綴會很有用。當您在一個選項檔案中列出選項時,該前綴會特別有用。有可能不能被程式的所有版本識別的選項可以冠以--loose前綴(或在選項檔案中用loose)。不能識別選項的程式版本將會發出一條警告並忽視該選項。

mysql偶爾有用的另一個選項是-e--execute選項,可用來將SQL語句傳遞給伺服器。該語句必須用引號引起來(單引號或雙引號)(然而,如果想要在查詢中將值引起來,則對於查詢應使用雙引號,查詢中引用的值應使用單引號)當使用該選項時,語句被執行,然後mysql立即退出命令外殼。

例如,您可以用下面的命令獲得用戶帳號列資料表:

shell> mysql -u root -p -e "SELECT User, Host FROM User" mysql
Enter password: ******
+------+-----------+
| User | Host      |
+------+-----------+
|      | gigan     |
| root | gigan     |
|      | localhost |
| jon  | localhost |
| root | localhost |
+------+-----------+
shell>

請注意mysql資料庫名作為一個獨立的參量傳遞。然而,相同的查詢可能已經使用mysql -u root -p -e "SELECT UserHost FROM mysql.User"從外殼中執行。

可以按這種方式傳遞多個SQL語句,用分號隔開:

shell> mysql -u root -p --execute="SELECT Name FROM Country WHERE Name LIKE 'AU%';SELECT COUNT(*) FROM City" world
Enter password: ******
+-----------+
| Name      |
+-----------+
| Australia |
| Austria   |
+-----------+
+----------+
| COUNT(*) |
+----------+
|     4079 |
+----------+

請注意長形式(--execute)後面必須緊跟一個等號(=)

-e選項也可以以類似方式用來將命令傳遞給MySQL叢集的ndb_mgm管理客戶端。相關例子參見17.3.6節,「安全關閉和重啟」

4.3.2. 使用選項檔案

MySQL程式可以從選項檔案(有時也稱為配置檔案)讀取啟動選項。選項檔案提供了一種很方便的方式來指定常用的選項,因此不需要每次運行程式時從命令行輸入。

下面的程式支援選項檔案:myisamchkmyisampackmysqlmysql.servermysqladminmysqlbinlogmysqlccmysqlcheckmysqld_safemysqldumpmysqldmysqlhotcopymysqlimportmysqlshow

註釋:MySQL叢集程式使用的選項檔案參見17.4節,「MySQL叢集的配置」

Windows中,MySQL程式從以下檔案讀取啟動選項:

檔案名

目的

WINDIR\my.ini

全局選項

C:\my.cnf

全局選項

INSTALLDIR\my.ini

全局選項

defaults-extra-file

--defaults-extra-file=path指定的檔案,如果有

WINDIR資料表示Windows目錄的位置。通常為C:\WINDOWSC:\WINNT。您可以使用下面的命令通過環境變數WINDIR的值確定其確切位置:

C:\> echo %WINDIR%

INSTALLDIR資料表示MySQL的安裝目錄。一般為C:\PROGRAMDIR\MySQL\MySQL 5.1 Server,其中PROGRAMDIR資料表示程式目錄(通常為Windows英文版的Program Files)MySQL 5.1的安裝是根據安裝和配置嚮導完成的。參見2.3.5.14節,「my.ini檔案的位置」

Unix中,MySQL程式從下面的檔案讀取啟動選項:

檔案名

目的

/etc/my.cnf

全局選項

$MYSQL_HOME/my.cnf

伺服器相關選項

defaults-extra-file

--defaults-extra-file=path指定的檔案,如果有

~/.my.cnf

用戶相關選項

MYSQL_HOME是一個環境變數,包含伺服器相關的my.cnf檔案駐留的目錄路徑。

如果未設置MYSQL_HOME,並且DATADIR中有一個my.cnf檔案,BASEDIR中沒有my.cnf檔案,mysqld_safeMYSQL_HOME設置為DATADIR。否則,如果未設置MYSQL_HOME並且在DATADIR中沒有my.cnf,則mysqld_safeMYSQL_HOME設置為BASEDIR

典型情況二進制安裝的目錄為/usr/local/mysql/data或源代碼安裝的目錄為/usr/local/var。請注意這是配置時指定的數據目錄的位置,而不是 mysqld啟動時用--datadir指定的。運行時使用--datadir對尋找選項檔案的伺服器沒有效果,因為伺服器在處理命令行參量之前尋找這些選項。

MySQL按照上述順序尋找選項檔案,並讀存在的選項檔案。如果您想要使用的某個選項檔案不存在,則用明文文本編輯器建立。如果存在多個選項檔案,檔案中指定的後讀取的選項要優先檔案中指定的先讀取的選項。

註釋:Unix平台上,MySQL忽略人人可寫的配置檔案。這是故意的,是一個安全措施。

任何可以在運行MySQL程式時在命令行給出的長選項也可以在選項檔案中給出。要想列出程式的適用選項,用--help選項運行程式。

在選項檔案中指定選項的語法類似於命令行語法,例外的是要忽略掉兩個破折號。例如,命令行中的--quick--host=localhost在選項檔案中應指定為quickhost=localhost。要想在選項檔案中指定--loose-opt_name形式的選項,應寫為loose-opt_name

選項檔案中的空行被忽略掉。非空行可以採用下面任何形式:

·         #註釋註釋

註釋行以『#』或『』開頭。『#』註釋也可以從行的中部開始。

·         [group]

group是您想要設置選項的程式名或組名。在組行後面,任何opt_nameset-variable行適用於組名,直到選項檔案結尾或給出其它組行。

·         opt_name

等價於命令行中的--opt_name

·         opt_name=value

等價於命令行中的--opt_name=value。在選項檔案中,『=』字元附近可以有空格,而在命令行中是不允許的。您可以用單引號或雙引號來引用值。如果值包含一個『#』註釋字元或空格時很有用。

選項名和值前後的空白將自動刪除掉。您可以在選項值中使用轉義序列『\b』、『\t』、『\n』、『\r』、『\\』以及『\s』來資料表示退格、tab、換行符、回車以及空格字元。

Windows中,如果某個選項值資料表示一個路徑名,應使用『/』而不是『\』作為路徑名間隔符來指定值。如果使用『\』,必須用雙斜線『\\』,因為『\』在MySQL中為轉義字元。

如果選項組名與程式名相同,則組內的選項專用於該程式。

所有客戶程式(不能mysqld)讀取[client]選項組。這樣允許您指定適用於所有客戶端的選項。例如,[client]是用於指定連接伺服器的 密碼的理想的組。(但應確保該選項檔案只能由您自己讀寫,以便其他人不能發現您的密碼)一定不要隨意在[client]組內放置選項,除非它可以被您使用的所有客戶程式識別。如果您試圖運行程式,如果程式不理解選項則會顯示一條錯誤消息後退出。

5.0系列的MySQL 5.0.4開始,可以在選項檔案中使用!include指令來包括具體檔案和!includedir來搜索選項檔案的具體目錄。例如,要包括檔案/home/mydir/myopt.cnf,可以使用:

!include /home/me/myopt.cnf

要搜索所有以.cnf結尾的檔案的目錄/home/mydir並作為選項檔案讀取,應使用:

!includedir /home/mydir

請注意這些選項與節有關。例如,假定您想要使用my.cnf中的某些內容,如下所示:

[mysqld]
!include /home/mydir/myopt.cnf

在這種情況下,只為該伺服器處理檔案myopt.cnf,並且!include指令將被客戶應用程式忽略。然而,如果您使用下面的部分:

[mysqldump]
!includedir /home/mydir/my-dump-option

則只有mysqldump為以.cnf結尾的檔案檢查目錄/home/mydir/my-dump-option,伺服器或其它客戶應用程式均不檢查。

註釋:目前,在Unix作業系統中,所發現的使用!includedir指令包括的檔案的檔案名必須.cnf為延伸名。在Windows中,該指令也為有.ini延伸名(包括.cnf)的檔案做檢查。

如果您想要建立只由一個具體mysqld伺服器發佈系列讀取的選項組,選項組可以用[mysqld-5.0][mysqld-5.1]等名稱。下面的組資料表示--new選項只能用於5.1.x 版本的MySQL伺服器:

[mysqld-5.1]
new

下面是一個典型的全局選項檔案:

[client]
port=3306
socket=/tmp/mysql.sock
 
[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M
 
[mysqldump]
quick

在上述的選項檔案中,設置key_buffer_sizemax_allowed_packet變數的行使用了var_name=value語法。

下面是一個典型的用戶選項檔案:

[client]
# The following password will be sent to all standard MySQL clients
password="my_password"
 
[mysql]
no-auto-rehash
connect_timeout=2
 
[mysqlhotcopy]
interactive-timeout
 

如果您有一個源代碼分發,可以從support-file目錄中找到名為my-xxxx.cnf的示範選項檔案。如果您有一個二進制分發,在MySQL安裝目錄的support-file目錄中搜尋。在Windows中,示範選項檔案也可以位於MySQL的安裝目錄(如果您不知道在哪裡,查閱本節前面或第2章:安裝MySQL)。目前有小、中等、大以及非常大的系統的示範選項檔案。要想練習這些檔案,在Windows中複製到C:\my.cnf或在Unix中複製到根目錄的.my.cnf

註釋:Windows中,可以不顯示.cnf選項檔案的延伸名。

所有支援選項檔案的MySQL程式可以處理下面的命令行選項:

·         --no-defaults

不讀取任何選項檔案。

·         --print-defaults

打印從選項檔案中獲得的程式名和所有選項。

·         --defaults-file=path_name

只使用給出的選項檔案。path_name是檔案的全路徑名。

·         --defaults-extra-file=path_name

在全局選項檔案後但在用戶選項檔案前讀該選項檔案。path_name是檔案的全路徑名。

為了正確工作,每個選項必須緊隨命令行中的命令名後,例外情況是--print-defaults可以緊隨--defaults-file--defaults-extra-file

shell指令中,可以使用my_print_defaults程式來分析選項檔案。下面的例子顯示了當要求顯示[client][mysql]組內發現的選項時my_print_defaults產生的輸出:

shell> my_print_defaults client mysql
--port=3306
--socket=/tmp/mysql.sock
--no-auto-rehash

開發人員請注意:在C客戶程式庫中,只是通過處理命令行參量前面的所有匹配選項(即相應組內的選項)來處理選項檔案。對於使用多次指定的最後的選項實例的程式,可以很好地工作。如果您有一個CC++程式按這種方式處理多次指定的選項,但不讀取選項檔案,只需要新增兩行來實現該功能。檢查標準MySQL客戶程式的源代碼來看看如何做。

其它幾個MySQL語言接口基於C客戶庫,它們中的一部分提供了訪問選項檔案的一種方式。包括PerlPython。關於接口的詳細訊息參見相關文檔。

4.3.3. 用環境變數指定選項

要想用環境變數指定選項,使用適用註釋處理器的語法來設置變數。例如,在WindowsNetWare中,可以設置USER變數來指定MySQL帳號名。要想實現,使用語法:

SET USER=your_name

Unix中的語法取決於您的外殼。假定您想要使用MYSQL_TCP_PORT變數指定TCP/IP端口號。典型的語法為(例如shbashzsh等等)

MYSQL_TCP_PORT=3306
export MYSQL_TCP_PORT

1個命令設置變數,export命令將變數導出到外殼環境,以便其值可供MySQL和其它程序訪問。

cshtcsh有類似的問題。運行這些外殼時,使用setenv使外殼變數適用環境:

setenv MYSQL_TCP_PORT 3306

可以在命令提示符下執行設置環境變數的命令,以便立即生效。這些設定值持續到您註銷。要向讓這些設定值在您每次登錄時生效,將相應命令放入每次啟動時命令解釋符所讀的啟動檔案中。在Windows中典型啟動檔案為AUTOEXEC.BATbash.bash_profile,或者tcsh.tcshrc。關於命令解釋符的具體細節請查閱文檔。

附錄F:環境變數 了列出影響MySQL程式操作的所有環境變數。

4.3.4. 使用選項設置程式變數

許多MySQL程式有一些內部變數可以在運行時設置。程式變數的設置與帶有值的其它長選項相同。例如,mysql有一個max_allowed_packet變數,可以控制其通信緩衝區的最大長度。要想為mysqlmax_allowed_packet變數的值設置為16MB,使用下面的任何一個命令:

shell> mysql --max_allowed_packet=16777216
shell> mysql --max_allowed_packet=16M

1個命令以字節指定值。第2個命令以兆字節指定值。變數值可以有一個後綴KM或者G(可以為大寫或小寫)來資料表示千字節、兆字節或者十億字節的單位。

在選項檔案中,變數設定值沒有引導破折號:

[mysql]
max_allowed_packet=16777216

或:

[mysql]
max_allowed_packet=16M

如果您喜歡,變數名的下劃線可以為破折號。

註釋:MySQL 5.1仍然能識別舊的語法--set-variable = option=value,但現在不贊成使用。

部分伺服器變數可以在運行時設置。詳情參見5.3.3.1節,「動態系統變數」


這是MySQL參考手冊的翻譯版本,關於MySQL參考手冊,請訪問dev.mysql.com.。原始參考手冊為英文版,與英文版參考手冊相比,本翻譯版可能不是最新的。