本文通過演示如何使用mysql客戶程序與數據庫服務器連接。mysql(有時稱為“終端監視器”或只是“監視”)是一個交互式程序,允許你連接一個MySQL服務器,運行查詢並察看結果。mysql可以用於批模式:你預先把查詢放在一個文件中,然後告訴mysql執行文件的內容。使用mysql的兩個方法都在這裡涉及。
為了看清由mysql提供的一個選擇項目表了,用--help選項調用它:
shell> mysql --help
本章假定mysql已經被安裝在你的機器上,並且有一個MySQL服務器你可以連接。如果這不是真的,聯絡你的MySQL管理員。(如果你是管理員,你將需要請教這本手冊的其他章節。)
建立和中止與服務器的連接
1、如何使用客戶機建立連接
為了連接到服務器,從外殼程序(即從 UNIX 提示符,或從 Windows 下的 DOS 控制台)激活 mysql 程序。命令如下:
shell>mysql
又如,直接連接一個數據庫:
shell> mysql db_name
其中的“$”在本書中代表外殼程序提示符。這是 UNIX 標准提示符之一;另一個為“#”。在 Windows 下,提示符類似 “c:>”。
2、客戶機最常使用的選項:主機、用戶和密碼
為了連接服務器,當你調用mysql時,你通常將需要提供一個MySQL用戶名和很可能,一個口令。如果服務器運行在不是你登錄的一台機器上,你也將需要指定主機名。聯系你的管理員以找出你應該使用什麼連接參數進行連接(即,那個主機,用戶名字和使用的口令)。一旦你知道正確的參數,你應該能象這樣連接:
shell> mysql -h host -u user -p
Enter password: ********
********代表你的口令;當mysql顯示Enter password:提示時輸入它。
在剛開始學習 MySQL 時,大概會為其安全系統而煩惱,因為它使您難於做自己想做的事。(您必須取得創建和訪問數據庫的權限,任何時候連接到數據庫都必須給出自己的名字和口令。)但是,在您通過數據庫錄入和使用自己的記錄後,看法就會馬上改變了。這時您會很欣賞 MySQL 阻止了其他人窺視(或者更惡劣一些,破壞!)您的資料。
下面介紹選項的含義:
-h host_name(可選擇形式:--host=host_name)
希望連接的服務器主機。如果此服務器運行在與 mysql 相同的機器上,這個選項一般可省略。
-u user_name(可選擇的形式:--user=user_name)
您的 MySQL 用戶名。如果使用 UNIX 且您的 MySQL 用戶名與注冊名相同,則可以省去這個選項;mysql 將使用您的注冊名作為您的 MySQL 名。
在 Windows 下,缺省的用戶名為 ODBC。這可能不一定非常有用。可在命令行上指定一個名字,也可以通過設置 USER 變量在環境變量中設置一個缺省名。如用下列 set 命令指定 paul 的一個用戶名:
-p(可選擇的形式:--password)
這個選項告訴 mysql 提示鍵入您的 MySQL 口令。注意:可用 -pyour_password 的形式(可選擇的形式:--password=your_password)在命令行上鍵入您的口令。但是,出於安全的考慮,最好不要這樣做。選擇 -p 不跟口令告訴 mysql 在啟動時提示您鍵入口令。例如:
在看到 Enter password: 時,鍵入口令即可。(口令不會顯到屏幕,以免給別人看到。)請注意,MySQL 口令不一定必須與 UNIX 或 Windows 口令相同。
如果完全省略了 -p 選項,mysql 就認為您不需要口令,不作提示。
請注意:-h 和 -u 選項與跟在它們後面的詞有關,無論選項和後跟的詞之間是否有空格。而 -p 卻不是這樣,如果在命令行上給出口令,-p 和口令之間一定不加空格。
例如,假定我的 MySQL 用戶名和口令分別為 tom 和 secret,希望連接到在我注冊的同一機器上運行的服務器上。下面的 mysql 命令能完成這項工作:
shell>mysql –u tom -p
在我鍵入命令後,mysql 顯示 Enter password: 提示鍵入口令。然後我鍵入口令(****** 表明我鍵入了 secret)。
如果一切順利的話,mysql 顯示一串消息和一個“mysql>”提示,表示它正等待我發布查詢。完整的啟動序列如下所示:
為了連接到在其他某個機器上運行的服務器,需要用 -h 指定主機名。如果該主機為 mysql.domain.net,則相應的命令如下所示:
shell>mysql –h mysql.domain.net –u tom -p
在後面的說明 mysql 命令行的多數例子中,為簡單起見,我們打算省去 -h、-u 和 -p 選項。並且假定您將會提供任何所需的選項。
有很多設置賬號的方法,從而不必在每次運行 mysql 時都在連接參數中進行鍵入。這個問題在前面已經介紹過,你只需在選項文件中提供參數,具體請看3.2.2。您可能會希望現在就跳到該節,以便找到一些更易於連接到服務器的辦法。
3、結束會話
在建立了服務器的一個連接後,可在任何時候鍵入下列命令來結束會話:
quit exit
還可以鍵入 Control-D 來退出,至少在 UNIX 上可以這樣。
利用選項文件簡化連接
在激活 mysql 時,有可能需要指定諸如主機名、用戶名或口令這樣的連接參數。運行一個程序需要做很多輸入工作,這很快就會讓人厭煩。利用選項文件可以存儲連接參數,減少輸入工作。
例如,對於使用mysqladmin客戶機來管理數據庫,那麼你很快會厭煩每次使用這麼長的命令行:
shell>mysql –u root –p varialbles
Enter password: *********
你也許會選擇使用全局選項文件來存貯你的參數:
[mysqladmin]
#也可以用[client],為所有的客戶機存儲參數
user=root
password=yourpassword
這樣執行mysqladmin variables就不會顯示任何存儲拒絕的錯誤,並且你可以用root用戶身份維護數據庫了。
且慢,你立刻會發現,這樣做是一個很大的安全漏洞,因為任何可以讀取選項文件的用戶都可以獲得你的密碼!解決方法是,只提供password選項不提供密碼:
[mysqladmin]
user=root
password
這樣你在命令行執行時,會提示你數據密碼:
shell>mysql varialbles
Enter password: *********
但是,你不能不提供password選項,否則你還是要在命令行中提供-p選項。
利用 mysql 的輸入行編輯器
mysql 具有內建的 GNU Readline 庫,允許對輸入行進行編輯。可以對當前錄入的行進行處理,或調出以前輸入的行並重新執行它們(原樣執行或做進一步的修改後執行)。在錄入一行並發現錯誤時,這是非常方便的;您可以在按 Enter 鍵前,在行內退格並進行修正。如果錄入了一個有錯的查詢,那麼可以調用該查詢並對其進行編輯以解決問題,然後再重新提交它。(如果您在一行上鍵入了整個查詢,這是最容易的方法。)
表1中列出了一些非常有用的編輯序列,除了此表中給出的以外,還有許多輸入編輯命令。利用因特網搜索引擎,應該能夠找到 Readline手冊的聯機版本。此手冊也包含在 Readline 分發包中,可在 . org/ 的 Gnu Web 站點得到。
表1 mysql 輸入編輯命令
鍵 序 列 說 明
Up 箭頭,Ctrl-p
Down 箭頭,Ctrl-N
Left 箭頭,Ctrl-B
Right 箭頭,Ctrl-F
Escape Ctrl-B
Escape Ctrl-F
Ctrl-A
Ctrl-E
Ctrl-D
Delete
Escape D
Escape Backspace
Ctrl-K
Ctrl-_ 調前面的行
調下一行
光標左移(向後)
光標右移(向前)
向後移一個詞
向前移一個詞
將光標移到行頭
將光標移到行尾
刪除光標下的字符
刪除光標左邊的字符
刪詞
刪除光標左邊的詞
刪除光標到行尾的所有字符
撤消最後的更改;可以重復
下面的例子描述了輸入編輯的一個簡單的使用。假定用 mysql 輸入了下列查詢:
如果在按 Enter 前,已經注意到將“president”錯拼成了“persident”,則可按左箭頭或 Ctrl-B 多次移動光標到“s”的左邊。然後按 Delete 兩次刪除“er”,鍵入“re”改正錯誤,並按 Enter 發布此查詢。如果沒注意到錯拼就按了 Enter,也不會有問題。在 mysql 顯示了錯誤消息後,按上箭頭或 Ctrl-P 調出該行,然後對其進行編輯。
輸入行編輯在 mysql 的 Windows 版中不起作用,但是可從 MySQL Web 站點取得免費的 cygwin_32 客戶機分發包。在該分發包中的mysqlc 程序與 mysql 一樣,但它支持輸入行編輯命令。
批處理模式連接
在前面的章節中,你交互式地使用mysql輸入查詢並且查看結果。你也可以以批模式運行mysql。為了做到這些,把你想要運行的命令放在一個文件中,然後告訴mysql從文件讀取它的輸入:
shell> mysql < batch-file
如果你需要在命令行上指定連接參數,命令可能看起來像這樣:
shell> mysql -h host -u user -p < batch-file
Enter password: ********
當你這樣使用mysql時,你正在創建一個腳本文件,然後執行腳本。
為什麼要使用一個腳本?有很多原因:
如果你重復地運行查詢(比如說,每天或每周),把它做成一個腳本使得你在每次執行它時避免重新鍵入。
你能通過拷貝並編輯腳本文件從類似的現有的查詢生成一個新查詢。
當你正在開發查詢時,批模式也是很有用的,特別對多行命令或多行語句序列。如果你犯了一個錯誤,你不必重新打入所有一切,只要編輯你的腳本來改正錯誤,然後告訴mysql再次執行它。
如果你有一個產生很多輸出的查詢,你可以通過一個分頁器而不是盯著它翻屏到你屏幕的頂端來運行輸出:
$ mysql < batch-file | more
你能捕捉輸出到一個文件中進行更一步的處理:
shell> mysql < batch-file > mysql