mysql資料目錄結構(轉)
mysql資料目錄結構(轉)[@more@] 從概念上講,大多數關聯式資料庫系統是相似的:它們有一系列資料庫組成,每個資料庫
包含一系列資料庫表,但每個系統有各自組織其管理的資料方式,mysql也不例外。
預設地,所有由mysql伺服器mysqld管理的資料儲存在一個稱為mysql資料目錄的地方,
所有資料庫都存放在哪兒,也包括提供伺服器操作資訊的狀態檔案。 如果你對一個mysql安
裝執行管理任務,你應該熟知資料目錄的佈局及用途。
本文介紹下列專題:
如何確定資料目錄的位置。
從概念上講,大多數關聯式資料庫系統是相似的:它們有一系列資料庫組成,每個資料庫
包含一系列資料庫表,但每個系統有各自組織其管理的資料方式,mysql也不例外。
預設地,所有由mysql伺服器mysqld管理的資料儲存在一個稱為mysql資料目錄的地方,
所有資料庫都存放在哪兒,也包括提供伺服器操作資訊的狀態檔案。 如果你對一個mysql安
裝執行管理任務,你應該熟知資料目錄的佈局及用途。
本文介紹下列專題:
如何確定資料目錄的位置。
伺服器如何組織並提供對資料庫和它管理的表的訪問。
在哪裡找到由伺服器生成的狀態檔案記憶它們包含什麼內容。
如何改變預設地點或資料目錄或單獨資料庫的組織結構。
1、資料目錄的位置
一個預設資料目錄被編譯進了伺服器,如果你從一個原始碼分發安裝mysql, 典型的缺
省目錄為/usr/local/var,如果從RPM檔案安裝則為/var/lib/mysql, 如果從一個二進位制分
發安裝則是/usr/local/mysql/data。
在你啟動伺服器,透過使用一個--datadir=/path/to/dir選項可以明確指定資料目錄位
置。如果你想把資料目錄置於其它預設位置外的某處,這很有用。
作為一名mysql管理員,你應該知道你的資料目錄在哪裡。如果你執行多個伺服器, 你
應該是到所有資料目錄在哪裡,但是如果你不知道確切的位置,由多種方法找到它:
使用mysqladmin variables從你的伺服器直接獲得資料目錄路徑名。 查詢datadir變數
的值,在Unix上,其輸出類似於:
%mysqladmin variables
+----------------------+----------------------+| variable_name | Value |+---
-------------------+----------------------+| back_log | 5 || connect_timeout
| 5 || basedir | /var/local/ || datadir | /usr/local/var/ |....
在Windows上,輸出可能看上去像這樣:
c:mysqladmin variables
+----------------------+----------------------+| variable_name | Value |+---
-------------------+----------------------+| back_log | 5 || connect_timeout
| 5 || basedir | c:mysql || datadir | c:mysqldata |....
如果你有多個伺服器在執行,它們將在不同的TCP/IP埠或套接字上監聽,透過提供連
接伺服器正在監聽的埠或套接字的--port或--socket選項,你可以輪流獲得它們每一個的
資料目錄資訊:
%msqladmin --port=port_name variables
%mysqladmin --socket=/path/to/socket variables
mysqladmin命令可執行在任何你能從其連線伺服器的主機上,如果你想在一個遠端主機
連線伺服器,使用一個--host=host_name選項:
%mysqladmin --host=host_name variables
在Windows上, 你可以透過使用--pipe強制一個命令管道連線和--socket=pipe_name指
定管道名來連線監聽一個命令管道的NT伺服器:
c:mysqladmin --pipe --socket=pipe_name variables
你可以使用ps命令檢視任何正在執行mysqld 程式的命令列。
試一下下列命令之一併尋找--datadir:
%ps axww | grep mysql BSD風格
%ps -ef | grep mysqld System V風格
如果你的系統執行多個伺服器,ps命令可能特別有用,因為你能馬上發現多個資料目錄
位置,缺點是必須在伺服器上執行,而且可能沒有有用的資訊產生,除非在mysqld命令列上
明確指定了--datadir選項。
如果mysql是從一個原始碼分發安裝的,你可以檢查其配置資訊確定資料目錄位置。 例
如,位置可從頂級Makefile中獲得,但是注意,位置是Makefile中的localstatedir值, 不
是datadir,而且,如果分發位於一個NFS掛載的檔案系統並用來為多個主機構建mysql, 配
置資訊反映了分發被最新構建的主機,這可能不能提供你感興趣的主機的資料目錄資訊。
如果上述方式失敗,你可以用find尋找資料庫檔案,下列命令尋找“.frm”檔案,它是任
何mysql安裝的一部分:
% find / -name ".frm" -print
在下文各例中,用DATADIR表示mysql資料目錄位置。
2、資料目錄結構
mysql資料目錄包含了伺服器管理的所有資料目錄,這些檔案被組織成一個樹狀結構,
透過利用Unix或Windows檔案系統的層次結構直接實現。
每個資料庫對應於資料目錄下的一個目錄。
在一個資料庫中的表對應於資料目錄下的檔案。
資料目錄也包含由伺服器產生的幾個狀態檔案,如日誌檔案。這些檔案提供了關於服務
器操作的重要資訊。對管理特別在出了問題而試圖確定問題原因時很有價值。例如,如果某
個特定查詢殺死伺服器,你可以透過檢查日誌檔案判別搗亂的查詢。
2.1 mysql伺服器怎樣提供對資料的訪問
在資料目錄下的一切由一個單獨的實體-mysql伺服器mysqld管理,客戶程式絕不直接操
作資料。相反,伺服器提供資料可訪問的切入點,它是客戶程式與它們想使用的資料之間的
中介。
當伺服器啟動時,如果有需要,它開啟日誌檔案,然後透過監聽網路連線位資料目錄呈
現一個網路介面。要訪問資料,客戶程式建立對伺服器的一個連線, 然後以mysql查詢傳輸
請求來執行希望的操作。伺服器執行每一個操作並將結果發回使用者。伺服器是多執行緒的並能
服務多個同時的客戶連線。然而,因為修改操作一個執行一個,實際效果是順序化請求,以
使兩個客戶決不能在同一時刻改變同一記錄。
在正常的情況下,讓伺服器作為資料庫訪問的唯一仲裁者提供了避免可從同時訪問資料
庫表的多個程式的破壞的保證。管理員應該知道有時伺服器沒有對資料目錄的獨裁控制。
當你在一個單個資料目錄上執行多個伺服器。一般倪雲新一個伺服器管理主機上的所有
資料庫,但是有可能執行多個伺服器。如果這完成提供對多個獨立資料目錄的訪問,沒有相
互影響的問題,但喲也能啟動多個伺服器並指向同一個目錄。一般地,這不是一個好主意。
如果你試圖這樣,最好是你的系統提供良好的檔案鎖定功能,否則伺服器將不能正確協作。
如果你將多個伺服器同時寫入日誌檔案,你也冒著你的日誌檔案稱為混亂的根源的風險。
在你執行isamchk和myisamchk時。isamchk和myisamchk實用程式用於表的維護、診錯和
修復,就想你想的那樣,因為這些程式可以修改表內容,允許它們與伺服器正在操作的同時
對錶操作,這樣能導致表損壞。理解如何限制這種相互影響是很重要的,這樣你不會損壞你
的表。
2.2 資料目表示
每個mysql伺服器管理的資料庫有自己的資料庫表,它是資料目錄下的一個子目錄, 其
名字與它表示的資料庫相同。例如資料庫my_db對應於資料庫目錄DATADIR/my_db。
這種表示允許多個資料庫級的語句在其實現中十分簡單。 CREATE DATABASE db_name在
資料目錄中建立一個db_name空目錄,具有隻允許mysql伺服器使用者(執行伺服器的Unix使用者)
的屬主和模式,這等價於下列手工在伺服器主機上建立資料庫:
%mkdir DATADIR/db_name%chmod 700 DADADIR/db_name
用一個空目錄表示一個新資料庫的最簡單方法與其它資料庫甚至為一個空資料庫建立大
量的控制檔案或系統檔案正好相反。
DROP DATABASE語句實現同樣簡單。 DROP DATABASE db_name刪除資料庫中的db_name目
錄和所有表檔案,這幾乎與下列命令一樣:
%rm -rf DATADIR/db_name
(差別是伺服器只刪除具有已知用於表的字尾名的檔案。 如果你在資料庫目錄建立了其
它檔案。則伺服器保留它們,而且目錄本身不被刪除。
SHOW DATABASE基本上不做什麼,只是列出位於資料目錄中的目錄名。 有些資料庫系統
保持一個主表,用於維護所有資料庫,但在mysql無此構件。由於賦予資料目錄結構的簡潔性,資料庫列表隱含在資料目錄的內容中,而且這樣的表不必有額外的開銷。
2.3 資料庫表的表示
每個資料庫在資料庫目錄中有3個檔案:一個樣式(描述檔案)、 一個資料檔案和一個
索引檔案。每個檔案的基本名是表名,檔名副檔名代表檔案型別。副檔名如下表。資料和
索引檔案的副檔名指出表使用老式IASM索引或新式MyISAM索引。表 mysql檔案型別
檔案型別 檔名副檔名 檔案內容
樣式檔案 .frm 描述表的結構(它的列、列型別、索引等)。
資料檔案 .ISD(ISAM)
或.MYD(MyISAM) 包含資料檔案上的所有索引的索引樹。
索引檔案 .ISM(ISAM)
或.MYI(MyISAM) 該索引檔案依賴表是否有索引而存在。
當你發出一條CREATE TABLE tbl_name時語句定義表的結構時,伺服器建立一個名為
tbl_name.frm的檔案,它包括該結構的內部編碼,同時也建立一個空資料和索引檔案,初始
化為包含指出無記錄和無索引的資訊(如果CREATE TABLE語句包括索引指定,索引檔案反映
出這些索引)。對應於表的檔案的屬主和模式被設定為只允許mysql伺服器使用者訪問。
當你發出一條ALTER TABLE tbl_name語句時,伺服器重新編碼tbl_name.frm,並修改數
據和索引檔案的內容以反映語句指定的結構改變。對於CREATE INDEX和DROP INDEX也是一樣,
因為它們被伺服器視為與ALTER TABLE等價。 DROP TABLE透過刪除對應於表的三個檔案來實
現。
雖然你可以透過刪除資料庫目錄中對應於表的三個檔案,但不能手工建立或修改一個表,
如,如果my_db是當前資料庫,DROP TABLE my_tbl大概等價於下列命令。
% rm -rf DATADIR/my_db/my_tbl.*
SHOW TABLE my_db的輸出只是列出my_db資料庫目錄中的.frm檔案的基檔名。 有些數
據庫系統一個登錄檔,列舉所有包含在一個資料庫中的表,mysql不是,因為不必要,"註冊
表"隱含在資料目錄的結構中。
2.4 作業系統對資料庫和表命名的限制
mysql對命名資料庫和表有一個原則:名字可以由當前字符集中的任何字母數字字元組成,
下劃線和美元符$也可以。名字最長為64個字元。
然而,因為資料庫和表的名字對應於目錄和檔名,伺服器執行的作業系統可能強加額
外的限制。
首先,資料庫和表名僅限於對檔名合法的字元,如$在mysql的原則中是允許的,但是
如果你的作業系統不允許,則你不能在目錄或表名中使用它。實際上,這對Unix或Windows
不是所擔心的,最大的難度是在執行資料庫管理時直接在shell中引用名字,例如,如果你
命名一個資料庫如$my_db,包含一個美元符,任何從shell中對該名字的引用可能被shell
解釋為對一個變數的引用:
%ls $my_db
my_db:undefined variable
對此,你必須轉義$字元或用引號禁止其特殊含義:
%ls $my_db
%ls '$my_db'
如果你用引號,一定要用單引號,而雙引號並不禁止變數解釋。
其次,雖然mysql允許資料庫和表名最長到64個字元, 但名字的長度受限於你的操作系
統限定的長度,一般這不是一個問題(雖然老的System V強制14個字元)。在這種情況下,
你資料庫名的上限為14個字元,而表名上限為10個字元,因為表示表的檔名有一個點(.)
和三個字元的副檔名。
第三,檔案系統的大小寫敏感性影響到你如何命名和引用資料庫和表名。如果檔案系統
是大小寫敏感的(如Unix),兩個名字my_tbl和MY_TBL是不同的表。如果檔案系統不是大小
寫敏感的(如Windows),這兩個名字指的是相同的表。 如果你用一個Unix伺服器開發資料
庫,並且如果你有可能轉移到Windows,你應該記住這一點。
2.5 mysql狀態檔案
除了資料庫目錄,mysql資料目錄還包含很多狀態檔案,這些檔案總結在下表中。 大多
數檔案的預設名從伺服器主機名生成,在下表中表示為HOSTNAME。表 mysql狀態檔案
檔案型別 預設名 檔案內容
程式ID HOSTNAME.pid 伺服器程式的ID
出錯日誌 HOSTNAME.err 啟動和關閉事件和出錯情況
一般日誌 HOSTNAME.log 連線/斷開事件和查詢資訊
更新日誌 HOSTNAME.nnn 修改表結構級內容的所有查詢文字
當伺服器啟動時,它將其程式ID寫入程式ID(PID)檔案中,而在它關閉時,刪除該檔案。
PID檔案是允許伺服器本身被其他程式找到的工具。例如,如果你執行mysql.server,在系統
關閉時,關閉mysql伺服器的指令碼檢查PID檔案以決定它需要向哪個程式發出一個終止訊號。
出錯日誌由safe_mysqld建立,作為伺服器標準出錯輸出的重定向,它包含任何發到stderr
的訊息。這意味著只有你透過呼叫safe_mysqld啟動伺服器,出錯檔案才存在(無論如何,
它是一個啟動伺服器的最好方法,因為如果它由於出錯而退出,safe_mysqld將重啟伺服器。)。
一般日誌和更新日誌是可選的。你可以只開啟你需要的日誌型別,用--log和
--log-update伺服器選項。
一般日誌提供伺服器操作的一般資訊:誰從哪裡連線伺服器和他們發出什麼查詢。更新
日誌提供查詢資訊,但只有修改資料庫內容的查詢。更新日誌內容被寫成SQL語句, 可以將
它們提供給mysql客戶程式來執行。如果你遇上崩潰,並且必須倒回備份檔案, 更新日誌就
很有用,因為你能重複執行自崩潰時的更新,透過將更新日誌反饋給伺服器,這允許你將數
據庫恢復到崩潰發生時的狀態。
下面是一個簡單的例子,資訊出現在一般日誌中,它是一個建立一個在資料庫test中表,
插入一行,然後刪除表的會話:
990509 7:37:09 492 Connect Paul@localhost on test 492 Query show databases
492 Query show tables 492 Field List tbl_1 492 Field List tbl_2 ...990509
7:34:22 492 Query CREATE TABLE my_tbl (val INT)990509 7:34:34 492 Query
INSERT INTO my_tbl values (1)990509 7:34:38 492 Query DROP TABLE my_tbl
990509 7:34:40 492 Quit
一般日誌包含日期和時間、伺服器程式ID、事件型別和事件資訊欄目。
同一個會話出現在更新日誌中看上去像這樣:
use test;CREATE TABLE my_tbl (val int);INSERT INTO my_tbl VALUES(1);
DROP TABLE my_tbl;
對更新日誌,用--log-long-format選項獲得一個擴充套件形式的日誌, 擴充套件日誌提供有關
誰何時發出每一條查詢,這使用更多的磁碟空間,但如果你想知道誰在做什麼,而不用將更
新日誌對照一般日誌的內容找到連線事件。
對上面的會話,擴充套件更新日誌產生這樣的資訊:
# Time: 990507 7:32:42# User@Host: paul [paul] @ localhost []use test;
CREATE TABLE my_tbl (val int);# User@Host: paul [paul] @ localhost
[]INSERT INTO my_tbl VALUES(1);# Time: 990507 7:32:43#
User@Host: paul [paul] @ localhost []DROP TABLE my_tbl;
保證你的日誌檔案安全並且不讓任意使用者讀取是個好主意。一般日誌和更新日誌都能包
含諸如口令等的敏感資訊,因為它們包含查詢文字。如:
990509 7:23:31 4 Query UPDATE user SET Password=PASSWORD("secret") WHERE user="root"
對於檢查和設定資料目錄的許可權,請見《mysql安全性指南》。 使資料目錄安性的指令
包含下列命令:
% chmod 700 DATADIR
以擁有資料目錄的Unix使用者執行此命令。確保伺服器也以此使用者執行,否則該命令不僅
將其它人拒之門外,它也阻止伺服器訪問你的資料庫。
狀態檔案出現在資料目錄的頂級目錄,就象資料庫目錄,所以你可能擔心這些檔名是
否與資料庫名衝突或出錯(如在伺服器執行SHOW DATABASES語句時)。答案是不。狀態和日
志檔案資訊儲存在檔案中,而資料庫是目錄,所以可執行程式能用一個簡單的stat()呼叫區
分它們。如果你看一下資料目錄,你可以區分狀態檔案和資料庫目錄, 用ls -l並檢查模式
的第一個字元是一個"_"還是一個"d"。
你也可以簡單地看一下名字,所有狀態檔名包含一個點("."),而資料庫目錄沒有
(.在資料庫名中是無效字元)。
MySQL資料目錄結構(2)
3 重定位資料庫目錄
前面討論的資料目錄結構是預設配置,所有資料庫和狀態檔案均包含其中,然而,你有
某些自由決定資料目錄內容的位置,本節討論為什麼你可能移走部分資料目錄(或甚至目錄
本身)、你能移走什麼以及你如何做這些改變。
MySQL允許你重定位資料目錄或其中的成員,由幾個原因你為什麼要這樣做:
你能將資料目錄放在你預設所在的檔案系統更大容量的檔案系統上。
如果你的資料目錄在一個繁忙的硬碟上,你可能把它放在不太忙的磁碟上以均衡磁碟活
動。你可以把資料庫和日誌檔案放在分開的磁碟上或跨磁碟分佈。
你可能想執行多個伺服器,各自有自己的資料目錄,這是解決每個程式檔案描述符限制
問題的一種方法,特別是你不能重新配置核心以允許更高的限制。
有些系統在例如/var/run中儲存伺服器的部分檔案,你可能想把MySQL的PID檔案也放在
那兒,為了系統操作的一致性。
3.1 重定位方法
有兩種方法重定位資料目錄的內容:
你可以在伺服器啟動時指定選項,在命令列或在一個選項檔案的[mysqld]中。
你可以移走要重定位的東西,然後在原位置做一個指向新位置的符號連線。
兩種方法都不能解決你能重定位的一切,下表總結了什麼能重定位和用哪種方法重定位。
如果你使用選項檔案,有可能在全域性選項檔案/etc/my.cnf(Windows上的c:my.cnf) 指定
選項。當前的Windows版本也尋找系統目錄(c:Windows或c:NT)。表 重定位方法
重定位方法 適用的重定位方法
整個資料目錄 啟動選項或符號連線
單個資料庫目錄 符號連線
單個資料庫表 符號連線
PID檔案 啟動選項
一般日誌 啟動選項
更新日誌 啟動選項
你也可以使用預設資料目錄中的選項檔案my.cnf,但不推薦使用該檔案。如果你想重定
位資料目錄本身,你不得不讓預設資料目錄可讀以便使你能在這裡放置選項檔案指定伺服器
應該在哪裡找到“真正”的資料目錄!這很混亂。如果你想使用一個選項檔案指定伺服器選項,
最好使用/etc/my.cnf。
3.1 檢驗重定位的效果
在試圖重定位任何東西之前,檢驗操作達到預期效果是個好主意。藉助於du、df和
ls -l命令獲得磁碟空間的資訊,但這些依賴於你正確瞭解你的檔案系統的佈局。
下面演示一個在你檢驗一個屬目錄重定位時的設計陷阱。假定你的資料目錄是
/usr/local/var,而你想把它移到/var/mysql,因為df顯示/var檔案系統有很多的空閒空間:
%df /usr /varFilesystem
1k-blocks Used Avail Capacity Mounted on/dev/wd0s3e
396895 292126 73018 80% /usr/dev/wd0s3f
1189359 1111924 162287 15% /var
重定位的資料目錄在/usr檔案系統上有多少空閒空間呢?要知道它,使用du -s找出該目錄使用多少空間。
%cd /usr/local/var%du -s .133426
這大約是130MB,真實這樣嗎?在資料目錄下試一下df:
%df /usr/local/varFilesystem
1k-blocks Used Avail Capacity Mounted on/dev/wd0s3f
1189359 1111924 162287 15% /var
這就奇怪了。如果我們為包含/usr/local/var的檔案系統申請空閒空間,為什麼卻報告
var上的空間呢?這裡ls -l提供了答案:
%ls -l /usr/local....lrwxrwxrwx 1 root wheel 10 Dec 11 23:33 var -> /var/mysql....
輸出顯示/usr/local/var是對/var/mysql的符號連線,換句話說,資料目錄已經被重定
位於/var檔案系統,並用一個指向那裡的符號連線代替。透過將資料目錄移到/var竟然釋放
了/usr上那麼多空間!
3.2 重定位資料目錄
要重定位資料目錄,關閉伺服器並把資料目錄移到新位置上,然後你應該刪除員資料目
錄並用指向新位置的符號連線代替它,或用明確指出新位置的選項重啟伺服器。下表列出指
定位置的命令列和選項。表 資料目錄重定位語法
選項源 語法
命令列 --data-dir=/path/to/dir
選項檔案 [mysqld]
datadir=/path/to/dir
3.3 重定位資料庫
資料庫能透過符號連線的方法移走。要重定位一個資料庫,關閉伺服器並移走資料庫目
錄並刪除原來的資料庫目錄,用指向新位置的符號連線代替它,然後重啟伺服器。
下例顯示你如何將一個資料庫bigdb移到一個不同的地方:
%mysqladmin -u root -p shutdownEnter password: ******
%cd DATADIR%tar cf - bigdb | (cd /var/db; tar xf -)
%mv bigdb bigdb.origln -s /var/db/bigdb .
%safe_mysqld
你應該以該資料目錄的擁有者執行這些命令。為了安全起見,原資料庫目錄改名為
bigdb.orig。在你驗證了伺服器工作正常後,你可以刪除原資料目錄。
%rm -rf bigdb.orig
3.4 重定位資料庫表
重定位一個單獨的表不是個好主意。你可以透過把表檔案移到一個不同地方,並在資料
目錄中建立指向這些檔案的符號連線進行。然而,如果你發出一條
ALTER TABLE或OPTIMIZE TABLE語句,將不進行你的修改。
每個語句透過在資料庫目錄中建立一個實現你修改或最佳化的臨時表,然後刪除原來的表
並將臨時表更名為原來的表來完成,結果是你的符號連線被刪除,而且新表又回到資料庫目
錄,這是你移走前的原表檔案位置。更糟糕的是,你還沒有意識到它們在那兒,繼續佔據著
空間,而且符號連線已經被破壞,這樣以後當你意識到發生的事情時,如果你忘記你把它們
移到什麼地方,你可能沒有好辦法追蹤檔案了。
因為很難保證具有表訪問權的人不修改或最佳化表,所以最好把表留在資料庫目錄中。
3.5 重定位狀態檔案
你可以重中定位PID檔案、一般日誌和更新日誌。出錯日誌由safe_mysqld用啟動選項創
建,而不能被重定位(除非你編輯safe_mysqld)。
要在一個不同位置寫入狀態檔案,關閉伺服器,然後由指定新狀態檔案位置的適當選項
啟動它。下表列出每一個檔案的命令列和選項檔案的語法。表 狀態檔案重定位語法
選項源 語法
命令列 --pid-file=pidfile
--log=lodfile
--log-update=updatefile
選項檔案 [mysqld]
pid-file=pidfile
log=lodfile
log-update=updatefile
如果你用絕對路徑名指定狀態檔案,用該路徑建立檔案,否則檔案在資料目錄下建立。
如,如果你指定--pid-file=/var/run/mysqld.pid,PID檔案是/var/run/mysqld.pid。如果
你指定-pid-file=mysqld.pid,PID檔案是DATADIR/mysqld.pid。
如果你指定無副檔名的更新日誌檔案,MySQL在它每次開啟更新日誌時產生順序名。這些
名字用一個副檔名.nnn,這裡.nnn是還沒被現有更新日誌使用的第一個數字(如update.000,
update.001等)。你可以透過明確指定副檔名來覆蓋順序名,這時伺服器將只使用指定的名字。
包含一系列資料庫表,但每個系統有各自組織其管理的資料方式,mysql也不例外。
預設地,所有由mysql伺服器mysqld管理的資料儲存在一個稱為mysql資料目錄的地方,
所有資料庫都存放在哪兒,也包括提供伺服器操作資訊的狀態檔案。 如果你對一個mysql安
裝執行管理任務,你應該熟知資料目錄的佈局及用途。
本文介紹下列專題:
如何確定資料目錄的位置。
從概念上講,大多數關聯式資料庫系統是相似的:它們有一系列資料庫組成,每個資料庫
包含一系列資料庫表,但每個系統有各自組織其管理的資料方式,mysql也不例外。
預設地,所有由mysql伺服器mysqld管理的資料儲存在一個稱為mysql資料目錄的地方,
所有資料庫都存放在哪兒,也包括提供伺服器操作資訊的狀態檔案。 如果你對一個mysql安
裝執行管理任務,你應該熟知資料目錄的佈局及用途。
本文介紹下列專題:
如何確定資料目錄的位置。
伺服器如何組織並提供對資料庫和它管理的表的訪問。
在哪裡找到由伺服器生成的狀態檔案記憶它們包含什麼內容。
如何改變預設地點或資料目錄或單獨資料庫的組織結構。
1、資料目錄的位置
一個預設資料目錄被編譯進了伺服器,如果你從一個原始碼分發安裝mysql, 典型的缺
省目錄為/usr/local/var,如果從RPM檔案安裝則為/var/lib/mysql, 如果從一個二進位制分
發安裝則是/usr/local/mysql/data。
在你啟動伺服器,透過使用一個--datadir=/path/to/dir選項可以明確指定資料目錄位
置。如果你想把資料目錄置於其它預設位置外的某處,這很有用。
作為一名mysql管理員,你應該知道你的資料目錄在哪裡。如果你執行多個伺服器, 你
應該是到所有資料目錄在哪裡,但是如果你不知道確切的位置,由多種方法找到它:
使用mysqladmin variables從你的伺服器直接獲得資料目錄路徑名。 查詢datadir變數
的值,在Unix上,其輸出類似於:
%mysqladmin variables
+----------------------+----------------------+| variable_name | Value |+---
-------------------+----------------------+| back_log | 5 || connect_timeout
| 5 || basedir | /var/local/ || datadir | /usr/local/var/ |....
在Windows上,輸出可能看上去像這樣:
c:mysqladmin variables
+----------------------+----------------------+| variable_name | Value |+---
-------------------+----------------------+| back_log | 5 || connect_timeout
| 5 || basedir | c:mysql || datadir | c:mysqldata |....
如果你有多個伺服器在執行,它們將在不同的TCP/IP埠或套接字上監聽,透過提供連
接伺服器正在監聽的埠或套接字的--port或--socket選項,你可以輪流獲得它們每一個的
資料目錄資訊:
%msqladmin --port=port_name variables
%mysqladmin --socket=/path/to/socket variables
mysqladmin命令可執行在任何你能從其連線伺服器的主機上,如果你想在一個遠端主機
連線伺服器,使用一個--host=host_name選項:
%mysqladmin --host=host_name variables
在Windows上, 你可以透過使用--pipe強制一個命令管道連線和--socket=pipe_name指
定管道名來連線監聽一個命令管道的NT伺服器:
c:mysqladmin --pipe --socket=pipe_name variables
你可以使用ps命令檢視任何正在執行mysqld 程式的命令列。
試一下下列命令之一併尋找--datadir:
%ps axww | grep mysql BSD風格
%ps -ef | grep mysqld System V風格
如果你的系統執行多個伺服器,ps命令可能特別有用,因為你能馬上發現多個資料目錄
位置,缺點是必須在伺服器上執行,而且可能沒有有用的資訊產生,除非在mysqld命令列上
明確指定了--datadir選項。
如果mysql是從一個原始碼分發安裝的,你可以檢查其配置資訊確定資料目錄位置。 例
如,位置可從頂級Makefile中獲得,但是注意,位置是Makefile中的localstatedir值, 不
是datadir,而且,如果分發位於一個NFS掛載的檔案系統並用來為多個主機構建mysql, 配
置資訊反映了分發被最新構建的主機,這可能不能提供你感興趣的主機的資料目錄資訊。
如果上述方式失敗,你可以用find尋找資料庫檔案,下列命令尋找“.frm”檔案,它是任
何mysql安裝的一部分:
% find / -name ".frm" -print
在下文各例中,用DATADIR表示mysql資料目錄位置。
2、資料目錄結構
mysql資料目錄包含了伺服器管理的所有資料目錄,這些檔案被組織成一個樹狀結構,
透過利用Unix或Windows檔案系統的層次結構直接實現。
每個資料庫對應於資料目錄下的一個目錄。
在一個資料庫中的表對應於資料目錄下的檔案。
資料目錄也包含由伺服器產生的幾個狀態檔案,如日誌檔案。這些檔案提供了關於服務
器操作的重要資訊。對管理特別在出了問題而試圖確定問題原因時很有價值。例如,如果某
個特定查詢殺死伺服器,你可以透過檢查日誌檔案判別搗亂的查詢。
2.1 mysql伺服器怎樣提供對資料的訪問
在資料目錄下的一切由一個單獨的實體-mysql伺服器mysqld管理,客戶程式絕不直接操
作資料。相反,伺服器提供資料可訪問的切入點,它是客戶程式與它們想使用的資料之間的
中介。
當伺服器啟動時,如果有需要,它開啟日誌檔案,然後透過監聽網路連線位資料目錄呈
現一個網路介面。要訪問資料,客戶程式建立對伺服器的一個連線, 然後以mysql查詢傳輸
請求來執行希望的操作。伺服器執行每一個操作並將結果發回使用者。伺服器是多執行緒的並能
服務多個同時的客戶連線。然而,因為修改操作一個執行一個,實際效果是順序化請求,以
使兩個客戶決不能在同一時刻改變同一記錄。
在正常的情況下,讓伺服器作為資料庫訪問的唯一仲裁者提供了避免可從同時訪問資料
庫表的多個程式的破壞的保證。管理員應該知道有時伺服器沒有對資料目錄的獨裁控制。
當你在一個單個資料目錄上執行多個伺服器。一般倪雲新一個伺服器管理主機上的所有
資料庫,但是有可能執行多個伺服器。如果這完成提供對多個獨立資料目錄的訪問,沒有相
互影響的問題,但喲也能啟動多個伺服器並指向同一個目錄。一般地,這不是一個好主意。
如果你試圖這樣,最好是你的系統提供良好的檔案鎖定功能,否則伺服器將不能正確協作。
如果你將多個伺服器同時寫入日誌檔案,你也冒著你的日誌檔案稱為混亂的根源的風險。
在你執行isamchk和myisamchk時。isamchk和myisamchk實用程式用於表的維護、診錯和
修復,就想你想的那樣,因為這些程式可以修改表內容,允許它們與伺服器正在操作的同時
對錶操作,這樣能導致表損壞。理解如何限制這種相互影響是很重要的,這樣你不會損壞你
的表。
2.2 資料目表示
每個mysql伺服器管理的資料庫有自己的資料庫表,它是資料目錄下的一個子目錄, 其
名字與它表示的資料庫相同。例如資料庫my_db對應於資料庫目錄DATADIR/my_db。
這種表示允許多個資料庫級的語句在其實現中十分簡單。 CREATE DATABASE db_name在
資料目錄中建立一個db_name空目錄,具有隻允許mysql伺服器使用者(執行伺服器的Unix使用者)
的屬主和模式,這等價於下列手工在伺服器主機上建立資料庫:
%mkdir DATADIR/db_name%chmod 700 DADADIR/db_name
用一個空目錄表示一個新資料庫的最簡單方法與其它資料庫甚至為一個空資料庫建立大
量的控制檔案或系統檔案正好相反。
DROP DATABASE語句實現同樣簡單。 DROP DATABASE db_name刪除資料庫中的db_name目
錄和所有表檔案,這幾乎與下列命令一樣:
%rm -rf DATADIR/db_name
(差別是伺服器只刪除具有已知用於表的字尾名的檔案。 如果你在資料庫目錄建立了其
它檔案。則伺服器保留它們,而且目錄本身不被刪除。
SHOW DATABASE基本上不做什麼,只是列出位於資料目錄中的目錄名。 有些資料庫系統
保持一個主表,用於維護所有資料庫,但在mysql無此構件。由於賦予資料目錄結構的簡潔性,資料庫列表隱含在資料目錄的內容中,而且這樣的表不必有額外的開銷。
2.3 資料庫表的表示
每個資料庫在資料庫目錄中有3個檔案:一個樣式(描述檔案)、 一個資料檔案和一個
索引檔案。每個檔案的基本名是表名,檔名副檔名代表檔案型別。副檔名如下表。資料和
索引檔案的副檔名指出表使用老式IASM索引或新式MyISAM索引。表 mysql檔案型別
檔案型別 檔名副檔名 檔案內容
樣式檔案 .frm 描述表的結構(它的列、列型別、索引等)。
資料檔案 .ISD(ISAM)
或.MYD(MyISAM) 包含資料檔案上的所有索引的索引樹。
索引檔案 .ISM(ISAM)
或.MYI(MyISAM) 該索引檔案依賴表是否有索引而存在。
當你發出一條CREATE TABLE tbl_name時語句定義表的結構時,伺服器建立一個名為
tbl_name.frm的檔案,它包括該結構的內部編碼,同時也建立一個空資料和索引檔案,初始
化為包含指出無記錄和無索引的資訊(如果CREATE TABLE語句包括索引指定,索引檔案反映
出這些索引)。對應於表的檔案的屬主和模式被設定為只允許mysql伺服器使用者訪問。
當你發出一條ALTER TABLE tbl_name語句時,伺服器重新編碼tbl_name.frm,並修改數
據和索引檔案的內容以反映語句指定的結構改變。對於CREATE INDEX和DROP INDEX也是一樣,
因為它們被伺服器視為與ALTER TABLE等價。 DROP TABLE透過刪除對應於表的三個檔案來實
現。
雖然你可以透過刪除資料庫目錄中對應於表的三個檔案,但不能手工建立或修改一個表,
如,如果my_db是當前資料庫,DROP TABLE my_tbl大概等價於下列命令。
% rm -rf DATADIR/my_db/my_tbl.*
SHOW TABLE my_db的輸出只是列出my_db資料庫目錄中的.frm檔案的基檔名。 有些數
據庫系統一個登錄檔,列舉所有包含在一個資料庫中的表,mysql不是,因為不必要,"註冊
表"隱含在資料目錄的結構中。
2.4 作業系統對資料庫和表命名的限制
mysql對命名資料庫和表有一個原則:名字可以由當前字符集中的任何字母數字字元組成,
下劃線和美元符$也可以。名字最長為64個字元。
然而,因為資料庫和表的名字對應於目錄和檔名,伺服器執行的作業系統可能強加額
外的限制。
首先,資料庫和表名僅限於對檔名合法的字元,如$在mysql的原則中是允許的,但是
如果你的作業系統不允許,則你不能在目錄或表名中使用它。實際上,這對Unix或Windows
不是所擔心的,最大的難度是在執行資料庫管理時直接在shell中引用名字,例如,如果你
命名一個資料庫如$my_db,包含一個美元符,任何從shell中對該名字的引用可能被shell
解釋為對一個變數的引用:
%ls $my_db
my_db:undefined variable
對此,你必須轉義$字元或用引號禁止其特殊含義:
%ls $my_db
%ls '$my_db'
如果你用引號,一定要用單引號,而雙引號並不禁止變數解釋。
其次,雖然mysql允許資料庫和表名最長到64個字元, 但名字的長度受限於你的操作系
統限定的長度,一般這不是一個問題(雖然老的System V強制14個字元)。在這種情況下,
你資料庫名的上限為14個字元,而表名上限為10個字元,因為表示表的檔名有一個點(.)
和三個字元的副檔名。
第三,檔案系統的大小寫敏感性影響到你如何命名和引用資料庫和表名。如果檔案系統
是大小寫敏感的(如Unix),兩個名字my_tbl和MY_TBL是不同的表。如果檔案系統不是大小
寫敏感的(如Windows),這兩個名字指的是相同的表。 如果你用一個Unix伺服器開發資料
庫,並且如果你有可能轉移到Windows,你應該記住這一點。
2.5 mysql狀態檔案
除了資料庫目錄,mysql資料目錄還包含很多狀態檔案,這些檔案總結在下表中。 大多
數檔案的預設名從伺服器主機名生成,在下表中表示為HOSTNAME。表 mysql狀態檔案
檔案型別 預設名 檔案內容
程式ID HOSTNAME.pid 伺服器程式的ID
出錯日誌 HOSTNAME.err 啟動和關閉事件和出錯情況
一般日誌 HOSTNAME.log 連線/斷開事件和查詢資訊
更新日誌 HOSTNAME.nnn 修改表結構級內容的所有查詢文字
當伺服器啟動時,它將其程式ID寫入程式ID(PID)檔案中,而在它關閉時,刪除該檔案。
PID檔案是允許伺服器本身被其他程式找到的工具。例如,如果你執行mysql.server,在系統
關閉時,關閉mysql伺服器的指令碼檢查PID檔案以決定它需要向哪個程式發出一個終止訊號。
出錯日誌由safe_mysqld建立,作為伺服器標準出錯輸出的重定向,它包含任何發到stderr
的訊息。這意味著只有你透過呼叫safe_mysqld啟動伺服器,出錯檔案才存在(無論如何,
它是一個啟動伺服器的最好方法,因為如果它由於出錯而退出,safe_mysqld將重啟伺服器。)。
一般日誌和更新日誌是可選的。你可以只開啟你需要的日誌型別,用--log和
--log-update伺服器選項。
一般日誌提供伺服器操作的一般資訊:誰從哪裡連線伺服器和他們發出什麼查詢。更新
日誌提供查詢資訊,但只有修改資料庫內容的查詢。更新日誌內容被寫成SQL語句, 可以將
它們提供給mysql客戶程式來執行。如果你遇上崩潰,並且必須倒回備份檔案, 更新日誌就
很有用,因為你能重複執行自崩潰時的更新,透過將更新日誌反饋給伺服器,這允許你將數
據庫恢復到崩潰發生時的狀態。
下面是一個簡單的例子,資訊出現在一般日誌中,它是一個建立一個在資料庫test中表,
插入一行,然後刪除表的會話:
990509 7:37:09 492 Connect Paul@localhost on test 492 Query show databases
492 Query show tables 492 Field List tbl_1 492 Field List tbl_2 ...990509
7:34:22 492 Query CREATE TABLE my_tbl (val INT)990509 7:34:34 492 Query
INSERT INTO my_tbl values (1)990509 7:34:38 492 Query DROP TABLE my_tbl
990509 7:34:40 492 Quit
一般日誌包含日期和時間、伺服器程式ID、事件型別和事件資訊欄目。
同一個會話出現在更新日誌中看上去像這樣:
use test;CREATE TABLE my_tbl (val int);INSERT INTO my_tbl VALUES(1);
DROP TABLE my_tbl;
對更新日誌,用--log-long-format選項獲得一個擴充套件形式的日誌, 擴充套件日誌提供有關
誰何時發出每一條查詢,這使用更多的磁碟空間,但如果你想知道誰在做什麼,而不用將更
新日誌對照一般日誌的內容找到連線事件。
對上面的會話,擴充套件更新日誌產生這樣的資訊:
# Time: 990507 7:32:42# User@Host: paul [paul] @ localhost []use test;
CREATE TABLE my_tbl (val int);# User@Host: paul [paul] @ localhost
[]INSERT INTO my_tbl VALUES(1);# Time: 990507 7:32:43#
User@Host: paul [paul] @ localhost []DROP TABLE my_tbl;
保證你的日誌檔案安全並且不讓任意使用者讀取是個好主意。一般日誌和更新日誌都能包
含諸如口令等的敏感資訊,因為它們包含查詢文字。如:
990509 7:23:31 4 Query UPDATE user SET Password=PASSWORD("secret") WHERE user="root"
對於檢查和設定資料目錄的許可權,請見《mysql安全性指南》。 使資料目錄安性的指令
包含下列命令:
% chmod 700 DATADIR
以擁有資料目錄的Unix使用者執行此命令。確保伺服器也以此使用者執行,否則該命令不僅
將其它人拒之門外,它也阻止伺服器訪問你的資料庫。
狀態檔案出現在資料目錄的頂級目錄,就象資料庫目錄,所以你可能擔心這些檔名是
否與資料庫名衝突或出錯(如在伺服器執行SHOW DATABASES語句時)。答案是不。狀態和日
志檔案資訊儲存在檔案中,而資料庫是目錄,所以可執行程式能用一個簡單的stat()呼叫區
分它們。如果你看一下資料目錄,你可以區分狀態檔案和資料庫目錄, 用ls -l並檢查模式
的第一個字元是一個"_"還是一個"d"。
你也可以簡單地看一下名字,所有狀態檔名包含一個點("."),而資料庫目錄沒有
(.在資料庫名中是無效字元)。
MySQL資料目錄結構(2)
3 重定位資料庫目錄
前面討論的資料目錄結構是預設配置,所有資料庫和狀態檔案均包含其中,然而,你有
某些自由決定資料目錄內容的位置,本節討論為什麼你可能移走部分資料目錄(或甚至目錄
本身)、你能移走什麼以及你如何做這些改變。
MySQL允許你重定位資料目錄或其中的成員,由幾個原因你為什麼要這樣做:
你能將資料目錄放在你預設所在的檔案系統更大容量的檔案系統上。
如果你的資料目錄在一個繁忙的硬碟上,你可能把它放在不太忙的磁碟上以均衡磁碟活
動。你可以把資料庫和日誌檔案放在分開的磁碟上或跨磁碟分佈。
你可能想執行多個伺服器,各自有自己的資料目錄,這是解決每個程式檔案描述符限制
問題的一種方法,特別是你不能重新配置核心以允許更高的限制。
有些系統在例如/var/run中儲存伺服器的部分檔案,你可能想把MySQL的PID檔案也放在
那兒,為了系統操作的一致性。
3.1 重定位方法
有兩種方法重定位資料目錄的內容:
你可以在伺服器啟動時指定選項,在命令列或在一個選項檔案的[mysqld]中。
你可以移走要重定位的東西,然後在原位置做一個指向新位置的符號連線。
兩種方法都不能解決你能重定位的一切,下表總結了什麼能重定位和用哪種方法重定位。
如果你使用選項檔案,有可能在全域性選項檔案/etc/my.cnf(Windows上的c:my.cnf) 指定
選項。當前的Windows版本也尋找系統目錄(c:Windows或c:NT)。表 重定位方法
重定位方法 適用的重定位方法
整個資料目錄 啟動選項或符號連線
單個資料庫目錄 符號連線
單個資料庫表 符號連線
PID檔案 啟動選項
一般日誌 啟動選項
更新日誌 啟動選項
你也可以使用預設資料目錄中的選項檔案my.cnf,但不推薦使用該檔案。如果你想重定
位資料目錄本身,你不得不讓預設資料目錄可讀以便使你能在這裡放置選項檔案指定伺服器
應該在哪裡找到“真正”的資料目錄!這很混亂。如果你想使用一個選項檔案指定伺服器選項,
最好使用/etc/my.cnf。
3.1 檢驗重定位的效果
在試圖重定位任何東西之前,檢驗操作達到預期效果是個好主意。藉助於du、df和
ls -l命令獲得磁碟空間的資訊,但這些依賴於你正確瞭解你的檔案系統的佈局。
下面演示一個在你檢驗一個屬目錄重定位時的設計陷阱。假定你的資料目錄是
/usr/local/var,而你想把它移到/var/mysql,因為df顯示/var檔案系統有很多的空閒空間:
%df /usr /varFilesystem
1k-blocks Used Avail Capacity Mounted on/dev/wd0s3e
396895 292126 73018 80% /usr/dev/wd0s3f
1189359 1111924 162287 15% /var
重定位的資料目錄在/usr檔案系統上有多少空閒空間呢?要知道它,使用du -s找出該目錄使用多少空間。
%cd /usr/local/var%du -s .133426
這大約是130MB,真實這樣嗎?在資料目錄下試一下df:
%df /usr/local/varFilesystem
1k-blocks Used Avail Capacity Mounted on/dev/wd0s3f
1189359 1111924 162287 15% /var
這就奇怪了。如果我們為包含/usr/local/var的檔案系統申請空閒空間,為什麼卻報告
var上的空間呢?這裡ls -l提供了答案:
%ls -l /usr/local....lrwxrwxrwx 1 root wheel 10 Dec 11 23:33 var -> /var/mysql....
輸出顯示/usr/local/var是對/var/mysql的符號連線,換句話說,資料目錄已經被重定
位於/var檔案系統,並用一個指向那裡的符號連線代替。透過將資料目錄移到/var竟然釋放
了/usr上那麼多空間!
3.2 重定位資料目錄
要重定位資料目錄,關閉伺服器並把資料目錄移到新位置上,然後你應該刪除員資料目
錄並用指向新位置的符號連線代替它,或用明確指出新位置的選項重啟伺服器。下表列出指
定位置的命令列和選項。表 資料目錄重定位語法
選項源 語法
命令列 --data-dir=/path/to/dir
選項檔案 [mysqld]
datadir=/path/to/dir
3.3 重定位資料庫
資料庫能透過符號連線的方法移走。要重定位一個資料庫,關閉伺服器並移走資料庫目
錄並刪除原來的資料庫目錄,用指向新位置的符號連線代替它,然後重啟伺服器。
下例顯示你如何將一個資料庫bigdb移到一個不同的地方:
%mysqladmin -u root -p shutdownEnter password: ******
%cd DATADIR%tar cf - bigdb | (cd /var/db; tar xf -)
%mv bigdb bigdb.origln -s /var/db/bigdb .
%safe_mysqld
你應該以該資料目錄的擁有者執行這些命令。為了安全起見,原資料庫目錄改名為
bigdb.orig。在你驗證了伺服器工作正常後,你可以刪除原資料目錄。
%rm -rf bigdb.orig
3.4 重定位資料庫表
重定位一個單獨的表不是個好主意。你可以透過把表檔案移到一個不同地方,並在資料
目錄中建立指向這些檔案的符號連線進行。然而,如果你發出一條
ALTER TABLE或OPTIMIZE TABLE語句,將不進行你的修改。
每個語句透過在資料庫目錄中建立一個實現你修改或最佳化的臨時表,然後刪除原來的表
並將臨時表更名為原來的表來完成,結果是你的符號連線被刪除,而且新表又回到資料庫目
錄,這是你移走前的原表檔案位置。更糟糕的是,你還沒有意識到它們在那兒,繼續佔據著
空間,而且符號連線已經被破壞,這樣以後當你意識到發生的事情時,如果你忘記你把它們
移到什麼地方,你可能沒有好辦法追蹤檔案了。
因為很難保證具有表訪問權的人不修改或最佳化表,所以最好把表留在資料庫目錄中。
3.5 重定位狀態檔案
你可以重中定位PID檔案、一般日誌和更新日誌。出錯日誌由safe_mysqld用啟動選項創
建,而不能被重定位(除非你編輯safe_mysqld)。
要在一個不同位置寫入狀態檔案,關閉伺服器,然後由指定新狀態檔案位置的適當選項
啟動它。下表列出每一個檔案的命令列和選項檔案的語法。表 狀態檔案重定位語法
選項源 語法
命令列 --pid-file=pidfile
--log=lodfile
--log-update=updatefile
選項檔案 [mysqld]
pid-file=pidfile
log=lodfile
log-update=updatefile
如果你用絕對路徑名指定狀態檔案,用該路徑建立檔案,否則檔案在資料目錄下建立。
如,如果你指定--pid-file=/var/run/mysqld.pid,PID檔案是/var/run/mysqld.pid。如果
你指定-pid-file=mysqld.pid,PID檔案是DATADIR/mysqld.pid。
如果你指定無副檔名的更新日誌檔案,MySQL在它每次開啟更新日誌時產生順序名。這些
名字用一個副檔名.nnn,這裡.nnn是還沒被現有更新日誌使用的第一個數字(如update.000,
update.001等)。你可以透過明確指定副檔名來覆蓋順序名,這時伺服器將只使用指定的名字。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-961858/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux目錄結構-轉Linux
- 【MySQL 資料庫】MySQL目錄MySql資料庫
- 資料結構相關部落格目錄資料結構
- 【PG結構】Postgresql資料庫資料目錄說明SQL資料庫
- FreeBSD目錄結構一覽(轉)
- 資料結構與演算法系列 目錄資料結構演算法
- PostgreSQL 目錄結構SQL
- fabric 目錄結構
- dedecms 目錄結構
- [轉]DB2目錄檔案結構DB2
- wdcp修改mysql的資料目錄MySql
- 瞭解MySQl資料庫目錄MySql資料庫
- MySQL 更改資料庫資料儲存目錄MySql資料庫
- 【整理】資料結構——題目資料結構
- Tomcat目錄結構Tomcat
- 分析Angular目錄結構Angular
- Jmeter之目錄結構JMeter
- ecos框架目錄結構框架
- linux 目錄結構Linux
- 系統目錄結構
- django的目錄結構Django
- 程式碼目錄結構記錄
- 教你玩轉Linux—系統目錄結構Linux
- DiscuzX2.5完整目錄結構【模板目錄template】
- mysql資料庫-資料結構MySql資料庫資料結構
- 轉儲活動目錄資料庫憑證的方法總結資料庫
- 好程式設計師Java教程分享MySQL目錄結構程式設計師JavaMySql
- windows 2000活動目錄之結構篇(轉)Windows
- CLASSPATH 以及包和目錄結構的關係 (轉)
- 2.3 sqlmap目錄及結構SQL
- PostgreSQL:原始碼目錄結構SQL原始碼
- postgre目錄結構簡介
- ThinkPHP5.0目錄結構PHP
- linux的目錄結構Linux
- Android 目錄結構分析Android
- Helm目錄結構講解
- Tomcat目錄結構解析Tomcat
- golang開發目錄結構Golang