|
MySQL數(shù)據(jù)目錄結(jié)構(gòu)(1)[晏子] 從概念上講,大多數(shù)關(guān)系數(shù)據(jù)庫系統(tǒng)是相似的:它們有一系列數(shù)據(jù)庫組成,每個數(shù)據(jù)庫包含一系列數(shù)據(jù)庫表,但每個系統(tǒng)有各自組織其管理的數(shù)據(jù)方式,MySQL也不例外。 缺省地,所有由MySQL服務(wù)器mysqld管理的數(shù)據(jù)存儲在一個稱為MySQL數(shù)據(jù)目錄的地方,所有數(shù)據(jù)庫都存放在哪兒,也包括提供服務(wù)器操作信息的狀態(tài)文件。如果你對一個MySQl安裝執(zhí)行管理任務(wù),你應(yīng)該熟知數(shù)據(jù)目錄的布局及用途。 本文介紹下列專題:
1、數(shù)據(jù)目錄的位置一個缺省數(shù)據(jù)目錄被編譯進(jìn)了服務(wù)器,如果你從一個源代碼分發(fā)安裝MySQL,典型的缺省目錄為/usr/local/var,如果從RPM文件安裝則為/var/lib/mysql,如果從一個二進(jìn)制分發(fā)安裝則是/usr/local/mysql/data。 在你啟動服務(wù)器,通過使用一個--datadir=/path/to/dir選項可以明確指定數(shù)據(jù)目錄位置。如果你想把數(shù)據(jù)目錄置于其它缺省位置外的某處,這很有用。 作為一名MySQL管理員,你應(yīng)該知道你的數(shù)據(jù)目錄在哪里。如果你運行多個服務(wù)器,你應(yīng)該是到所有數(shù)據(jù)目錄在哪里,但是如果你不知道確切的位置,由多種方法找到它:
2、數(shù)據(jù)目錄結(jié)構(gòu)MySQL數(shù)據(jù)目錄包含了服務(wù)器管理的所有數(shù)據(jù)目錄,這些文件被組織成一個樹狀結(jié)構(gòu),通過利用Unix或Windows文件系統(tǒng)的層次結(jié)構(gòu)直接實現(xiàn)。
數(shù)據(jù)目錄也包含由服務(wù)器產(chǎn)生的幾個狀態(tài)文件,如日志文件。這些文件提供了關(guān)于服務(wù)器操作的重要信息。對管理特別在出了問題而試圖確定問題原因時很有價值。例如,如果某個特定查詢殺死服務(wù)器,你可以通過檢查日志文件判別搗亂的查詢。 2.1 MySQL服務(wù)器怎樣提供對數(shù)據(jù)的訪問在數(shù)據(jù)目錄下的一切由一個單獨的實體-MySQL服務(wù)器mysqld管理,客戶程序絕不直接操作數(shù)據(jù)。相反,服務(wù)器提供數(shù)據(jù)可訪問的切入點,它是客戶程序與它們想使用的數(shù)據(jù)之間的中介。 當(dāng)服務(wù)器啟動時,如果有需要,它打開日志文件,然后通過監(jiān)聽網(wǎng)絡(luò)連接位數(shù)據(jù)目錄呈現(xiàn)一個網(wǎng)絡(luò)接口。要訪問數(shù)據(jù),客戶程序建立對服務(wù)器的一個連接,然后以MySQL查詢傳輸請求來執(zhí)行希望的操作。服務(wù)器執(zhí)行每一個操作并將結(jié)果發(fā)回用戶。服務(wù)器是多線程的并能服務(wù)多個同時的客戶連接。然而,因為修改操作一個執(zhí)行一個,實際效果是順序化請求,以使兩個客戶決不能在同一時刻改變同一記錄。 在正常的情況下,讓服務(wù)器作為數(shù)據(jù)庫訪問的唯一仲裁者提供了避免可從同時訪問數(shù)據(jù)庫表的多個進(jìn)程的破壞的保證。管理員應(yīng)該知道有時服務(wù)器沒有對數(shù)據(jù)目錄的獨裁控制。
2.2 數(shù)據(jù)目表示每個MySQL服務(wù)器管理的數(shù)據(jù)庫有自己的數(shù)據(jù)庫表,它是數(shù)據(jù)目錄下的一個子目錄,其名字與它表示的數(shù)據(jù)庫相同。例如數(shù)據(jù)庫my_db對應(yīng)于數(shù)據(jù)庫目錄DATADIR/my_db。 這種表示允許多個數(shù)據(jù)庫級的語句在其實現(xiàn)中十分簡單。CREATE DATABASE db_name在數(shù)據(jù)目錄中創(chuàng)建一個db_name空目錄,具有只允許MySQL服務(wù)器用戶(運行服務(wù)器的Unix用戶)的屬主和模式,這等價于下列手工在服務(wù)器主機上創(chuàng)建數(shù)據(jù)庫: %mkdir DATADIR/db_name%chmod 700 DADADIR/db_name 用一個空目錄表示一個新數(shù)據(jù)庫的最簡單方法與其它數(shù)據(jù)庫甚至為一個空數(shù)據(jù)庫創(chuàng)建大量的控制文件或系統(tǒng)文件正好相反。 DROP DATABASE語句實現(xiàn)同樣簡單。DROP DATABASE db_name刪除數(shù)據(jù)庫中的db_name目錄和所有表文件,這幾乎與下列命令一樣: %rm -rf DATADIR/db_name (差別是服務(wù)器只刪除具有已知用于表的后綴名的文件。如果你在數(shù)據(jù)庫目錄創(chuàng)建了其它文件。則服務(wù)器保留它們,而且目錄本身不被刪除。 SHOW DATABASE基本上不做什么,只是列出位于數(shù)據(jù)目錄中的目錄名。有些數(shù)據(jù)庫系統(tǒng)保持一個主表,用于維護(hù)所有數(shù)據(jù)庫,但在MySQL無此構(gòu)件。由于賦予數(shù)據(jù)目錄結(jié)構(gòu)的簡潔性,數(shù)據(jù)庫列表隱含在數(shù)據(jù)目錄的內(nèi)容中,而且這樣的表不必有額外的開銷。 2.3 數(shù)據(jù)庫表的表示每個數(shù)據(jù)庫在數(shù)據(jù)庫目錄中有3個文件:一個樣式(描述文件)、一個數(shù)據(jù)文件和一個索引文件。每個文件的基本名是表名,文件名擴展名代表文件類型。擴展名如下表。數(shù)據(jù)和索引文件的擴展名指出表使用老式IASM索引或新式MyISAM索引。
|
溫馨提示:喜歡本站的話,請收藏一下本站!