1 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
由于MySQL服務(wù)器具有多種安裝分發(fā),而且能夠運(yùn)行在多種操作平臺(tái)之上,因此它的啟動(dòng)與停止的方法也多種多樣。你可以根據(jù)實(shí)際情況使用其中的一種。在你安裝、升級(jí)或者維護(hù)系統(tǒng)時(shí),你可能需要多次啟動(dòng)和終止服務(wù)器,你需要了解啟動(dòng)和終止服務(wù)器的方方面面。
3.1.1 直接運(yùn)行守護(hù)程序
1、你可以采用的方法
一般的,你可以有以下幾種選擇啟動(dòng)MySQL服務(wù)器,它們的功能和用法幾乎是相同的,所以一起在這里介紹:
? 直接使用MySQL守護(hù)程序mysqld啟動(dòng)數(shù)據(jù)庫(kù)系統(tǒng),尤其是Win32平臺(tái)上的分發(fā),這是因?yàn)?,在Win32平臺(tái)上沒(méi)有mysql.server等服務(wù)器腳本可用。
? 通過(guò)調(diào)用safe_mysqld腳本,它接受與mysqld相同的參數(shù),并試圖為mysqld決定正確的選項(xiàng),然后選擇用那些運(yùn)行它。
2、腳本或者守護(hù)程序的存放位置
對(duì)于二進(jìn)制分發(fā)的安裝,mysqld守護(hù)程序安裝在MySQL安裝目錄的bin目錄下,或者可在MySQL源代碼分發(fā)的libexec目錄下找到,缺省為/usr/local/libexec/。對(duì)于rpm分發(fā),mysqld應(yīng)該位于PATH變量決定的程序搜索路徑中,因此可以直接引用。
safe_mysqld仍舊是一個(gè)腳本,并且只存在于Unix平臺(tái)的分發(fā)中。safe_mysqld腳本安裝在MySQL安裝目錄的bin目錄下,或可在MySQL源代碼分發(fā)的scripts目錄下找到。對(duì)于rpm分發(fā),該腳本應(yīng)該位于PATH變量決定的程序搜索路徑中,因此可以直接引用。
3、為什么要使用safe_mysqld腳本
safe_mysqld接受和mysqld同樣的參數(shù),并試圖確定服務(wù)器程序和數(shù)據(jù)庫(kù)目錄的位置,然后利用這些位置調(diào)用服務(wù)器。safe_mysqld將服務(wù)器的標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到數(shù)據(jù)庫(kù)目錄中的錯(cuò)誤文件中,并以記錄的形式存在。啟動(dòng)服務(wù)器后,safe_mysqld還監(jiān)控服務(wù)器,并在其死機(jī)時(shí)重新啟動(dòng)。safe_mysqld通常用于Unix的BSD風(fēng)格的版本。
如果,你曾經(jīng)為root或在系統(tǒng)啟動(dòng)程序中啟動(dòng)safe_mysqld,其錯(cuò)誤日志將有root擁有。如果再用非特權(quán)的用戶身份調(diào)用safe_mysqld,則可能引起“Access Denied”(即,“所有權(quán)被拒絕”)的錯(cuò)誤。此時(shí)可以刪除錯(cuò)誤文件在試一次。
由于safe_mysqld腳本的功能,使用safe_mysqld腳本明顯比直接啟動(dòng)mysqld守護(hù)程序來(lái)得有效。
4、啟動(dòng)服務(wù)器的完整過(guò)程
對(duì)于Unix平臺(tái)上的分發(fā),如果你以root或在系統(tǒng)引導(dǎo)期間啟動(dòng)sqfe_mysqld,出錯(cuò)日志由root擁有,這可能在你以后試圖用一個(gè)非特權(quán)用戶調(diào)用safe_mysqld時(shí)將導(dǎo)致“permission denied”(權(quán)限拒絕)錯(cuò)誤,刪除出錯(cuò)日志再試一下。因此建議你在啟動(dòng)服務(wù)器前,首先切換到一個(gè)專門的用戶mysql。
具體方法如下:
? Unix平臺(tái)
$ su mysql
$ safe_mysql & (或者 mysqld & ,不推薦)
? Win32平臺(tái)
C: mysqlin>mysqld --standalone
或者C: mysqlin>mysqld-nt –standalone
如果你使用mysqld并且沒(méi)有把mysql安裝在標(biāo)準(zhǔn)的位置,通常需要提供—basedir選項(xiàng)你的數(shù)據(jù)庫(kù)的安裝位置。
$safe_mysqld --basedir=”/path/to/mysql” &(Unix平臺(tái))
c:mysqlin>mysqld --basedir=”x:/path/to/mysql” (Win32平臺(tái))
5、使用safe_mysqld腳本實(shí)現(xiàn)服務(wù)器的自動(dòng)啟動(dòng)
同樣你可以利用safe_mysqld和mysqld實(shí)現(xiàn)服務(wù)器隨操作系統(tǒng)自動(dòng)啟動(dòng)。對(duì)于Linux系統(tǒng)以及BSD風(fēng)格的系統(tǒng)(FreeBSD,OpenBSD等)),通常在/etc目錄下有幾個(gè)文件在引導(dǎo)時(shí)初始化服務(wù),這些文件通常有以“rc”開(kāi)頭的名字,且它有可能由一個(gè)名為“rc.local”的文件(或類似的東西),特意用于啟動(dòng)本地安裝的服務(wù)。
在這樣的系統(tǒng)上,你可能將類似于下列的行加入rc.local文件中以啟動(dòng)服務(wù)器(如果safe_mysqld的目錄在你的系統(tǒng)上不同,修改它即可):
if [ -x /usr/local/bin/safe_mysqld ]; then /usr/local/bin/safe_mysqld & fi
由于這樣在引導(dǎo)時(shí)啟動(dòng),將使用root身份啟動(dòng)數(shù)據(jù)庫(kù),在某些時(shí)候可能會(huì)產(chǎn)生問(wèn)題和麻煩。這是你可以指定--user選項(xiàng),因此可以將上面的代碼修改為:
if [ -x /usr/local/bin/safe_mysqld ]; then
/usr/local/bin/safe_mysqld --user=mysql --datadir=/path/to/data &
fi
3.1.2 使用腳本mysql.server啟動(dòng)關(guān)閉數(shù)據(jù)庫(kù)
對(duì)于Unix平臺(tái)上的分發(fā),比較好的辦法是使用數(shù)據(jù)庫(kù)腳本mysql.server,啟動(dòng)和關(guān)閉數(shù)據(jù)庫(kù)。
1、mysql.server腳本的存放位置
mysql.server腳本安裝在MySQL安裝目錄下的share/mysqld目錄下或可以在MySQL源代碼分發(fā)的support_files目錄下找到。對(duì)于rpm分發(fā),該腳本已經(jīng)改名mysql位于/etc/rc.d/init.d目錄中,另外在….中存在一個(gè)副本mysql.server。下文的討論對(duì)RPM分發(fā)來(lái)說(shuō),都在安裝中完成了。如果你想使用它們,你需要將它們拷貝到適當(dāng)?shù)哪夸浵隆?br/>2、如何使用mysql.server腳本啟動(dòng)停止服務(wù)器
mysql.server腳本可以被用來(lái)啟動(dòng)或停止服務(wù)器,通過(guò)用start或stop參數(shù)調(diào)用它:
$ mysql.server start
$ mysql.server stop
3、mysql.server的功能簡(jiǎn)述
在mysql.server啟動(dòng)服務(wù)器之前,它把目錄改變到MySQL安裝目錄,然后調(diào)用safe_mysqld。如果你有在一個(gè)非標(biāo)準(zhǔn)的地點(diǎn)安裝的二進(jìn)制分發(fā),你可能需要編輯mysql.server。修改它,運(yùn)行safe_mysqld前,cd到正確的目錄。
4、讓mysql.server以特定的用戶啟動(dòng)服務(wù)器
如果你想要作為一些特定的用戶運(yùn)行服務(wù)器,你可以改變mysql_daemon_user=root行使用其他用戶,你也能修改mysql.server把其他選項(xiàng)傳給safe_mysqld。
當(dāng)然你也可以利用選項(xiàng)文件給mysql.server腳本提供參數(shù)。
你也可以在一個(gè)全局“/etc/my.cnf”文件中增加mysql.server的選項(xiàng)。一個(gè)典型的“/etc/my.cnf”文件可能看起來(lái)像這樣:
[mysqld]
datadir=/usr/local/mysql/var
socket=/tmp/mysqld.sock
port=3306
[mysql.server]
user=mysql
basedir=/usr/local/mysql
mysql.server腳本使用下列變量:user、datadir、basedir、bindir和pid-file。
5、利用mysql.server腳本讓服務(wù)器自動(dòng)啟動(dòng)
mysql.server腳本的重要性在于你可以使用它配置一個(gè)隨操作系統(tǒng)自動(dòng)啟動(dòng)的數(shù)據(jù)庫(kù)安裝,這是一個(gè)實(shí)際的系統(tǒng)中常用的方法。
? 把mysql.server復(fù)制到/etc/rc.d/init.d目錄里面:
# cd /etc/rc.d/init.d
# cp /usr/local/mysql/support-files/mysql.server mysql
? 接著把它的屬性改為“x”(executable,可執(zhí)行)
# chmod +x mysql
? 最后,運(yùn)行chkconfig把MySQL添加到你系統(tǒng)的啟動(dòng)服務(wù)組里面去。
# /sbin/chkconfig --del mysql
# /sbin/chkconfig --add mysql
你也可以這樣做,手工建立鏈接:
#cd /etc/rc.d/rc3.d (根據(jù)你的運(yùn)行級(jí)不同而不同,可以是rc5.d)
#ln –s ../init.d/mysql S99mysql
在系統(tǒng)啟動(dòng)期間,S99mysql腳本利用start參數(shù)自動(dòng)啟動(dòng)。
3.1.3 使用mysqladmin實(shí)用程序關(guān)閉、重啟數(shù)據(jù)庫(kù)
日常維護(hù)數(shù)據(jù)庫(kù),經(jīng)常需要關(guān)閉或者重新啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器。mysql.server stop只能用于關(guān)閉數(shù)據(jù)庫(kù)系統(tǒng),并不方便,而且mysql.server腳本用特定用戶身份啟動(dòng)服務(wù)器,因此使用該教本需要超級(jí)用戶的權(quán)限。相比之下mysqladmin就方便的多,并且適用于MySQL所有類型、平臺(tái)的安裝。
? 關(guān)閉數(shù)據(jù)庫(kù)服務(wù)器
mysqladmin shutdown
? 重啟數(shù)據(jù)庫(kù)服務(wù)器
mysqladmin reload
? 獲得幫助
mysqladmin –help
mysqladmin實(shí)用程序非常有使用價(jià)值,仔細(xì)閱讀幫助輸出,你會(huì)得到更多的用法。
如果出現(xiàn)下面的錯(cuò)誤:
mysqladmin: connect to server at ’localhost’ failed
error: ’Access denied for user: ’root@localhost’ (Using password: YES)’
表示你需要一個(gè)可以正常連接的用戶,請(qǐng)指定-u -p選項(xiàng),具體方法與3.2節(jié)介紹相同,在第七章中你將會(huì)學(xué)到用戶授權(quán)的知識(shí)。例如,你現(xiàn)在可以:
shell>mysqladmin -u root -p shutdown
Enter Password:***********
輸入你在閱讀第二章時(shí)修改過(guò)的密碼即可。
3.1.4 啟動(dòng)或停止NT平臺(tái)上的系統(tǒng)服務(wù)
上面幾節(jié)介紹了Unix平臺(tái)上使數(shù)據(jù)庫(kù)服務(wù)器自動(dòng)啟動(dòng)的方法,而在windows(NT)平臺(tái)上為了讓MySQL數(shù)據(jù)庫(kù)自動(dòng)啟動(dòng),你需要將MySQL服務(wù)器安裝成NT系統(tǒng)的一種服務(wù)。
1、將MySQL安裝成系統(tǒng)服務(wù)
對(duì)于NT,服務(wù)器名字是mysqld-nt。
C:mysqlin> mysqld-nt --install
(你可以在 NT 上使用mysqld或mysqld-opt服務(wù)器,但是那些不能作為一種服務(wù)啟動(dòng)或使用命名管道。)
2、修改選項(xiàng)文件
如果你的mysql沒(méi)有安裝缺省的位置c:mysql,那么因?yàn)閿?shù)據(jù)庫(kù)將無(wú)法確定數(shù)據(jù)庫(kù)目錄的位置,而無(wú)法啟動(dòng)。這種情況下,你需要提供一個(gè)全局的選項(xiàng)文件c:my.cnf。將安裝目錄中的my-example.cnf文件拷貝到c盤根目錄下。修改或加入:
[mysqld]
basedir = x:/path/to/mysql/
3、啟動(dòng)、停止服務(wù)器的方法
你可以用下列命令啟動(dòng)和停止MySQL服務(wù):
NET START mysql
NET STOP mysql
注意在這種情況下,你不能對(duì)mysqld-nt使用任何其他選項(xiàng)!你需要使用選項(xiàng)文件提供參數(shù)??梢栽谶x項(xiàng)文件中提供合適的參數(shù)。
3.1.5 使用選項(xiàng)文件提供服務(wù)器的參數(shù)
本節(jié)介紹守護(hù)程序需要的比較重要的選項(xiàng)。
對(duì)于全局選項(xiàng)文件(windows:c:/my.cnf 或者 unix:/etc/my.cnf),比較重要的選項(xiàng)有:
user 運(yùn)行守護(hù)程序的用戶,如果你使用mysql.server,并且在[mysql.server]中指定了user,那么這個(gè)選項(xiàng)沒(méi)有必要。
log-update=file 更新日志名,對(duì)于恢復(fù)數(shù)據(jù)庫(kù)有重要意義,數(shù)據(jù)庫(kù)服務(wù)器將生成file.n為名的更新日志文件。
-l, --log[=file] 指定常規(guī)日志名
--log-bin[=file] 指定使用的二進(jìn)制日志文件,應(yīng)用于服務(wù)器復(fù)制。
-Sg, --skip-grant-tables 啟動(dòng)時(shí)不加載授權(quán)表,維護(hù)時(shí)使用。
-u, --user=user_name 啟動(dòng)服務(wù)器使用的Unix帳戶
--socket=... 指定是用的Unix套接字文件名,在同時(shí)運(yùn)行多個(gè)服務(wù)器時(shí)使用。
-P, --port=... 指定服務(wù)器使用的端口,在同時(shí)運(yùn)行多個(gè)服務(wù)器時(shí)使用。
3.1.6 總結(jié)
作為MySQL的管理員,你平時(shí)的指責(zé)就是確保服務(wù)器盡可能的正常運(yùn)行,使得客戶機(jī)能夠正常訪問(wèn)。本章討論了如何啟動(dòng)和重啟、關(guān)閉服務(wù)器,如果你具備了這個(gè)能力,就可以更好的維護(hù)服務(wù)器安裝。本章介紹的方法,多數(shù)適合于Unix系統(tǒng),讀者請(qǐng)仔細(xì)分辨。
3.2 MySQL與客戶機(jī)的連接
本章通過(guò)演示如何使用mysql客戶程序與數(shù)據(jù)庫(kù)服務(wù)器連接。mysql(有時(shí)稱為“終端監(jiān)視器”或只是“監(jiān)視”)是一個(gè)交互式程序,允許你連接一個(gè)MySQL服務(wù)器,運(yùn)行查詢并察看結(jié)果。mysql可以用于批模式:你預(yù)先把查詢放在一個(gè)文件中,然后告訴mysql執(zhí)行文件的內(nèi)容。使用mysql的兩個(gè)方法都在這里涉及。
為了看清由mysql提供的一個(gè)選擇項(xiàng)目表了,用--help選項(xiàng)調(diào)用它:
shell> mysql --help
本章假定mysql已經(jīng)被安裝在你的機(jī)器上,并且有一個(gè)MySQL服務(wù)器你可以連接。如果這不是真的,聯(lián)絡(luò)你的MySQL管理員。(如果你是管理員,你將需要請(qǐng)教這本手冊(cè)的其他章節(jié)。)
3.2.1建立和中止與服務(wù)器的連接
1、如何使用客戶機(jī)建立連接
為了連接到服務(wù)器,從外殼程序(即從 UNIX 提示符,或從 Windows 下的 DOS 控制臺(tái))激活 mysql 程序。命令如下:
shell>mysql
又如,直接連接一個(gè)數(shù)據(jù)庫(kù):
shell> mysql db_name
其中的“$”在本書中代表外殼程序提示符。這是 UNIX 標(biāo)準(zhǔn)提示符之一;另一個(gè)為“#”。在 Windows 下,提示符類似 “c:>”。
2、客戶機(jī)最常使用的選項(xiàng):主機(jī)、用戶和密碼
為了連接服務(wù)器,當(dāng)你調(diào)用mysql時(shí),你通常將需要提供一個(gè)MySQL用戶名和很可能,一個(gè)口令。如果服務(wù)器運(yùn)行在不是你登錄的一臺(tái)機(jī)器上,你也將需要指定主機(jī)名。聯(lián)系你的管理員以找出你應(yīng)該使用什么連接參數(shù)進(jìn)行連接(即,那個(gè)主機(jī),用戶名字和使用的口令)。一旦你知道正確的參數(shù),你應(yīng)該能象這樣連接:
shell> mysql -h host -u user -p
Enter password: ********
********代表你的口令;當(dāng)mysql顯示Enter password:提示時(shí)輸入它。
在剛開(kāi)始學(xué)習(xí) MySQL 時(shí),大概會(huì)為其安全系統(tǒng)而煩惱,因?yàn)樗鼓y于做自己想做的事。(您必須取得創(chuàng)建和訪問(wèn)數(shù)據(jù)庫(kù)的權(quán)限,任何時(shí)候連接到數(shù)據(jù)庫(kù)都必須給出自己的名字和口令。)但是,在您通過(guò)數(shù)據(jù)庫(kù)錄入和使用自己的記錄后,看法就會(huì)馬上改變了。這時(shí)您會(huì)很欣賞 MySQL 阻止了其他人窺視(或者更惡劣一些,破壞?。┠馁Y料。
下面介紹選項(xiàng)的含義:
-h host_name(可選擇形式:--host=host_name)
希望連接的服務(wù)器主機(jī)。如果此服務(wù)器運(yùn)行在與 mysql 相同的機(jī)器上,這個(gè)選項(xiàng)一般可省略。
? -u user_name(可選擇的形式:--user=user_name)
您的 MySQL 用戶名。如果使用 UNIX 且您的 MySQL 用戶名與注冊(cè)名相同,則可以省去這個(gè)選項(xiàng);mysql 將使用您的注冊(cè)名作為您的 MySQL 名。
在 Windows 下,缺省的用戶名為 ODBC。這可能不一定非常有用??稍诿钚猩现付ㄒ粋€(gè)名字,也可以通過(guò)設(shè)置 USER 變量在環(huán)境變量中設(shè)置一個(gè)缺省名。如用下列 set 命令指定 paul 的一個(gè)用戶名:
? -p(可選擇的形式:--password)
這個(gè)選項(xiàng)告訴 mysql 提示鍵入您的 MySQL 口令。注意:可用 -pyour_password 的形式(可選擇的形式:--password=your_password)在命令行上鍵入您的口令。但是,出于安全的考慮,最好不要這樣做。選擇 -p 不跟口令告訴 mysql 在啟動(dòng)時(shí)提示您鍵入口令。例如:
在看到 Enter password: 時(shí),鍵入口令即可。(口令不會(huì)顯到屏幕,以免給別人看到。)請(qǐng)注意,MySQL 口令不一定必須與 UNIX 或 Windows 口令相同。
如果完全省略了 -p 選項(xiàng),mysql 就認(rèn)為您不需要口令,不作提示。
請(qǐng)注意:-h 和 -u 選項(xiàng)與跟在它們后面的詞有關(guān),無(wú)論選項(xiàng)和后跟的詞之間是否有空格。而 -p 卻不是這樣,如果在命令行上給出口令,-p 和口令之間一定不加空格。
例如,假定我的 MySQL 用戶名和口令分別為 tom 和 secret,希望連接到在我注冊(cè)的同一機(jī)器上運(yùn)行的服務(wù)器上。下面的 mysql 命令能完成這項(xiàng)工作:
shell>mysql –u tom -p
在我鍵入命令后,mysql 顯示 Enter password: 提示鍵入口令。然后我鍵入口令(****** 表明我鍵入了 secret)。
如果一切順利的話,mysql 顯示一串消息和一個(gè)“mysql>”提示,表示它正等待我發(fā)布查詢。完整的啟動(dòng)序列如下所示:
為了連接到在其他某個(gè)機(jī)器上運(yùn)行的服務(wù)器,需要用 -h 指定主機(jī)名。如果該主機(jī)為 mysql.domain.net,則相應(yīng)的命令如下所示:
shell>mysql –h mysql.domain.net –u tom -p
在后面的說(shuō)明 mysql 命令行的多數(shù)例子中,為簡(jiǎn)單起見(jiàn),我們打算省去 -h、-u 和 -p 選項(xiàng)。并且假定您將會(huì)提供任何所需的選項(xiàng)。
有很多設(shè)置賬號(hào)的方法,從而不必在每次運(yùn)行 mysql 時(shí)都在連接參數(shù)中進(jìn)行鍵入。這個(gè)問(wèn)題在前面已經(jīng)介紹過(guò),你只需在選項(xiàng)文件中提供參數(shù),具體請(qǐng)看3.2.2。您可能會(huì)希望現(xiàn)在就跳到該節(jié),以便找到一些更易于連接到服務(wù)器的辦法。
3、結(jié)束會(huì)話
在建立了服務(wù)器的一個(gè)連接后,可在任何時(shí)候鍵入下列命令來(lái)結(jié)束會(huì)話:
quit exit
還可以鍵入 Control-D 來(lái)退出,至少在 UNIX 上可以這樣。
3.2.2利用選項(xiàng)文件簡(jiǎn)化連接
在激活 mysql 時(shí),有可能需要指定諸如主機(jī)名、用戶名或口令這樣的連接參數(shù)。運(yùn)行一個(gè)程序需要做很多輸入工作,這很快就會(huì)讓人厭煩。利用選項(xiàng)文件可以存儲(chǔ)連接參數(shù),減少輸入工作。
例如,對(duì)于使用mysqladmin客戶機(jī)來(lái)管理數(shù)據(jù)庫(kù),那么你很快會(huì)厭煩每次使用這么長(zhǎng)的命令行:
shell>mysql –u root –p varialbles
Enter password: *********
你也許會(huì)選擇使用全局選項(xiàng)文件來(lái)存貯你的參數(shù):
[mysqladmin]
#也可以用[client],為所有的客戶機(jī)存儲(chǔ)參數(shù)
user=root
password=yourpassword
這樣執(zhí)行mysqladmin variables就不會(huì)顯示任何存儲(chǔ)拒絕的錯(cuò)誤,并且你可以用root用戶身份維護(hù)數(shù)據(jù)庫(kù)了。
且慢,你立刻會(huì)發(fā)現(xiàn),這樣做是一個(gè)很大的安全漏洞,因?yàn)槿魏慰梢宰x取選項(xiàng)文件的用戶都可以獲得你的密碼!解決方法是,只提供password選項(xiàng)不提供密碼:
[mysqladmin]
user=root
password
這樣你在命令行執(zhí)行時(shí),會(huì)提示你數(shù)據(jù)密碼:
shell>mysql varialbles
Enter password: *********
但是,你不能不提供password選項(xiàng),否則你還是要在命令行中提供-p選項(xiàng)。
3.2.3 利用 mysql 的輸入行編輯器
mysql 具有內(nèi)建的 GNU Readline 庫(kù),允許對(duì)輸入行進(jìn)行編輯。可以對(duì)當(dāng)前錄入的行進(jìn)行處理,或調(diào)出以前輸入的行并重新執(zhí)行它們(原樣執(zhí)行或做進(jìn)一步的修改后執(zhí)行)。在錄入一行并發(fā)現(xiàn)錯(cuò)誤時(shí),這是非常方便的;您可以在按 Enter 鍵前,在行內(nèi)退格并進(jìn)行修正。如果錄入了一個(gè)有錯(cuò)的查詢,那么可以調(diào)用該查詢并對(duì)其進(jìn)行編輯以解決問(wèn)題,然后再重新提交它。(如果您在一行上鍵入了整個(gè)查詢,這是最容易的方法。)
表2-1中列出了一些非常有用的編輯序列,除了此表中給出的以外,還有許多輸入編輯命令。利用因特網(wǎng)搜索引擎,應(yīng)該能夠找到 Readline手冊(cè)的聯(lián)機(jī)版本。此手冊(cè)也包含在 Readline 分發(fā)包中,可在 http://www.gnu. org/ 的 Gnu Web 站點(diǎn)得到。
表2-1 mysql 輸入編輯命令
鍵 序 列 說(shuō) 明
Up 箭頭,Ctrl-p 調(diào)前面的行
Down 箭頭,Ctrl-N 調(diào)下一行
Left 箭頭,Ctrl-B 光標(biāo)左移(向后)
Right 箭頭,Ctrl-F 光標(biāo)右移(向前)
Escape Ctrl-B 向后移一個(gè)詞
Escape Ctrl-F 向前移一個(gè)詞
Ctrl-A 將光標(biāo)移到行頭
Ctrl-E 將光標(biāo)移到行尾
Ctrl-D 刪除光標(biāo)下的字符
Delete 刪除光標(biāo)左邊的字符
Escape D 刪詞
Escape Backspace 刪除光標(biāo)左邊的詞
Ctrl-K 刪除光標(biāo)到行尾的所有字符
Ctrl-_ 撤消最后的更改;可以重復(fù)
下面的例子描述了輸入編輯的一個(gè)簡(jiǎn)單的使用。假定用 mysql 輸入了下列查詢:
如果在按 Enter 前,已經(jīng)注意到將“president”錯(cuò)拼成了“persident”,則可按左箭頭或 Ctrl-B 多次移動(dòng)光標(biāo)到“s”的左邊。然后按 Delete 兩次刪除“er”,鍵入“re”改正錯(cuò)誤,并按 Enter 發(fā)布此查詢。如果沒(méi)注意到錯(cuò)拼就按了 Enter,也不會(huì)有問(wèn)題。在 mysql 顯示了錯(cuò)誤消息后,按上箭頭或 Ctrl-P 調(diào)出該行,然后對(duì)其進(jìn)行編輯。
輸入行編輯在 mysql 的 Windows 版中不起作用,但是可從 MySQL Web 站點(diǎn)取得免費(fèi)的 cygwin_32 客戶機(jī)分發(fā)包。在該分發(fā)包中的mysqlc 程序與 mysql 一樣,但它支持輸入行編輯命令。
3.2.4 批處理模式連接
在前面的章節(jié)中,你交互式地使用mysql輸入查詢并且查看結(jié)果。你也可以以批模式運(yùn)行mysql。為了做到這些,把你想要運(yùn)行的命令放在一個(gè)文件中,然后告訴mysql從文件讀取它的輸入:
shell> mysql < batch-file
如果你需要在命令行上指定連接參數(shù),命令可能看起來(lái)像這樣:
shell> mysql -h host -u user -p < batch-file
Enter password: ********
當(dāng)你這樣使用mysql時(shí),你正在創(chuàng)建一個(gè)腳本文件,然后執(zhí)行腳本。
為什么要使用一個(gè)腳本?有很多原因:
? 如果你重復(fù)地運(yùn)行查詢(比如說(shuō),每天或每周),把它做成一個(gè)腳本使得你在每次執(zhí)行它時(shí)避免重新鍵入。
? 你能通過(guò)拷貝并編輯腳本文件從類似的現(xiàn)有的查詢生成一個(gè)新查詢。
? 當(dāng)你正在開(kāi)發(fā)查詢時(shí),批模式也是很有用的,特別對(duì)多行命令或多行語(yǔ)句序列。如果你犯了一個(gè)錯(cuò)誤,你不必重新打入所有一切,只要編輯你的腳本來(lái)改正錯(cuò)誤,然后告訴mysql再次執(zhí)行它。
? 如果你有一個(gè)產(chǎn)生很多輸出的查詢,你可以通過(guò)一個(gè)分頁(yè)器而不是盯著它翻屏到你屏幕的頂端來(lái)運(yùn)行輸出:
$ mysql < batch-file | more
? 你能捕捉輸出到一個(gè)文件中進(jìn)行更一步的處理:
shell> mysql < batch-file > mysql.out
? 你可以散發(fā)腳本給另外的人,因此他們也能運(yùn)行命令。
? 一些情況不允許交互地使用,例如, 當(dāng)你從一個(gè)cron任務(wù)中運(yùn)行查詢時(shí)。在這種情況下,你必須使用批模式。
當(dāng)你以批模式運(yùn)行mysql時(shí),比起你交互地使用它時(shí),其缺省輸出格式是不同的(更簡(jiǎn)明些)。例如,當(dāng)交互式運(yùn)行SELECT DISTINCT species FROM pet時(shí),輸出看起來(lái)像這樣:
+---------+
| species |
+---------+
| bird |
| cat |
| dog |
| hamster |
| snake |
+---------+
但是當(dāng)以批模式運(yùn)行時(shí),像這樣:
species
bird
cat
dog
hamster
snake
如果你想要在批模式中得到交互的輸出格式,使用mysql -t。為了回顯以輸出被執(zhí)行的命令,使用mysql -vvv。
3.2.5 總結(jié)
本章中列舉了客戶機(jī)與服務(wù)器連接的幾種情況,讀者需要注意的是下面幾點(diǎn):
1、 如何提供參數(shù),以及參數(shù)的意義
2、 如何讓客戶機(jī)提示輸入密碼
3、 交互模式和批處理模式
4、 mysql客戶機(jī)的行編輯功能
3.3 有關(guān)數(shù)據(jù)庫(kù)的操作
從本節(jié)開(kāi)始正式介紹各種SQL語(yǔ)句。本節(jié)介紹有關(guān)數(shù)據(jù)庫(kù)級(jí)的SQL以及相關(guān)操作,查看、建立和刪除等操作。
3.3.1 用SHOW顯示已有的數(shù)據(jù)庫(kù)
句法:SHOW DATABASES [LIKE wild]
如果使用LIKE wild部分,wild字符串可以是一個(gè)使用SQL的“%”和“_”通配符的字符串。
功能:SHOW DATABASES列出在MySQL服務(wù)器主機(jī)上的數(shù)據(jù)庫(kù)。
你可以嘗試下面舉例,觀察輸出結(jié)果,例如:
mysql>show databases;
+----------+
| Database |
+----------+
| first |
| mysql |
| mytest |
| test |
| test1 |
+----------+
mysql>show databases like ‘my%’;
+----------------+
| Database (my%) |
+----------------+
| mysql |
| mytest |
+----------------+
用mysqlshow程序也可以得到已有數(shù)據(jù)庫(kù)列表。
3.3.2 用Create Dabase 創(chuàng)建數(shù)據(jù)庫(kù)
句法:CREATE DATABASE db_name
功能:CREATE DATABASE用給定的名字創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)。
如果數(shù)據(jù)庫(kù)已經(jīng)存在,發(fā)生一個(gè)錯(cuò)誤。
在MySQL中的數(shù)據(jù)庫(kù)實(shí)現(xiàn)成包含對(duì)應(yīng)數(shù)據(jù)庫(kù)中表的文件的目錄。因?yàn)閿?shù)據(jù)庫(kù)在初始創(chuàng)建時(shí)沒(méi)有任何表,CREATE DATABASE語(yǔ)句只是在MySQL數(shù)據(jù)目錄下面創(chuàng)建一個(gè)目錄。
例如:
mysql>create database myfirst;
然后利用show databases觀察效果。
3.3.3 用DROP DATABASE刪除數(shù)據(jù)庫(kù)
句法:DROP DATABASE [IF EXISTS] db_name
功能:DROP DATABASE刪除數(shù)據(jù)庫(kù)中的所有表和數(shù)據(jù)庫(kù)。要小心地使用這個(gè)命令!
DROP DATABASE返回從數(shù)據(jù)庫(kù)目錄被刪除的文件的數(shù)目。通常,這3倍于表的數(shù)量,因?yàn)槊繌埍韺?duì)應(yīng)于一個(gè)“.MYD”文件、一個(gè)“.MYI”文件和一個(gè)“.frm”文件。
在MySQL 3.22或以后版本中,你可以使用關(guān)鍵詞IF EXISTS阻止一個(gè)錯(cuò)誤的發(fā)生,如果數(shù)據(jù)庫(kù)不存在。
3.3.4 使用mysqladmin工具創(chuàng)建和刪除
在命令行環(huán)境下可以使用mysqladmin創(chuàng)建和刪除數(shù)據(jù)庫(kù)。
創(chuàng)建數(shù)據(jù)庫(kù):
shell> mysqladmin create db_name
刪除數(shù)據(jù)庫(kù):
shell> mysqladmin drop db_name
如果出現(xiàn)下面的錯(cuò)誤:
mysqladmin: connect to server at ’localhost’ failed
error: ’Access denied for user: ’root@localhost’ (Using password: YES)’
表示你需要一個(gè)可以正常連接的用戶,請(qǐng)指定-u -p選項(xiàng),具體方法與3.2節(jié)介紹相同,在第七章中你將會(huì)學(xué)到用戶授權(quán)的知識(shí)。
3.3.5 直接在數(shù)據(jù)庫(kù)目錄中創(chuàng)建或刪除
用上述方法創(chuàng)建數(shù)據(jù)庫(kù),只是MySQL數(shù)據(jù)目錄下面創(chuàng)建一個(gè)與數(shù)據(jù)庫(kù)同名目錄,同樣刪除數(shù)據(jù)庫(kù)是把這個(gè)目錄刪除。
所以,你可以直接這么做,創(chuàng)建或刪除數(shù)據(jù)庫(kù),或者給數(shù)據(jù)庫(kù)更名。這對(duì)備份和恢復(fù)備份有一定意義。
3.3.6 用USE選用數(shù)據(jù)庫(kù)
句法:USE db_name
USE db_name語(yǔ)句告訴MySQL使用db_name數(shù)據(jù)庫(kù)作為隨后的查詢的缺省數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)保持到會(huì)話結(jié)束,或發(fā)出另外一個(gè)USE語(yǔ)句:
mysql> USE db1;
mysql> SELECT count(*) FROM mytable; # selects from db1.mytable
mysql> USE db2;
mysql> SELECT count(*) FROM mytable; # selects from db2.mytable
如果你不是用USE語(yǔ)句,那么上面的例子應(yīng)該寫成:
mysql> SELECT count(*) FROM db1.mytable;
mysql> SELECT count(*) FROM db2.mytable;
由于use也是一個(gè)mysql客戶程序的命令,所以你可以在命令行最后不加分號(hào),客戶程序可以得到結(jié)果。
3.3.7 總結(jié)
本節(jié)介紹了有關(guān)數(shù)據(jù)庫(kù)操作的SQL語(yǔ)句、實(shí)用程序,其中包括:
? SQL語(yǔ)句:CREATE/DROP DATABASE,SHOW DATABASES,USE
? 程序mysqladmin
? 直接創(chuàng)建或刪除數(shù)據(jù)庫(kù)的目錄
3.4 有關(guān)數(shù)據(jù)表的操作
用MySQL,目前(版本 3.23)你可以在三種基本數(shù)據(jù)庫(kù)表格式間選擇。當(dāng)你創(chuàng)建一張表時(shí),你可以告訴MySQL它應(yīng)該對(duì)于表使用哪個(gè)表類型。MySQL將總是創(chuàng)建一個(gè).frm文件保存表和列定義。視表類型而定,索引和數(shù)據(jù)將在其他文件中存儲(chǔ)。
你能用ALTER TABLE語(yǔ)句在不同類型的表之間變換。見(jiàn)7.8 ALTER TABLE語(yǔ)法。
? MyISAM
在MySQL 3.23中,MyISAM是缺省表格類型,它是基于ISAM代碼并且有很多有用的擴(kuò)展。索引存儲(chǔ)在一個(gè)有.MYI(MYindex)擴(kuò)展名的文件并且數(shù)據(jù)存儲(chǔ)在有.MYD(MYData)擴(kuò)展名的文件中。你能用myisamchk實(shí)用程序檢查/修復(fù)MyISAM表。
? ISAM
你也可以使用放棄的ISAM。這將在不久消失,因?yàn)镸yISAM是同一個(gè)東西的更好實(shí)現(xiàn)。ISAM使用一個(gè)B-tree索引,這個(gè)索引存儲(chǔ)在一個(gè)有.ISM擴(kuò)展名的文件中并且數(shù)據(jù)存儲(chǔ)在有.ISD擴(kuò)展名的文件中,你可用isamchk實(shí)用程序檢查/修復(fù)ISAM表。ISAM表不是跨OS/平臺(tái)二進(jìn)制可移植的。
? HEAP
HEAP表格使用一個(gè)雜湊(hashed)索引并且存儲(chǔ)在內(nèi)存中。這使他們更快,但是如果MySQL崩?
添加回答
舉報(bào)