標籤:引擎 memory nes like 組織 檔案類型 show 啟動失敗 一個
Mysql體繫結構和儲存引擎
1.1 定義資料庫和執行個體
資料庫:物理作業系統檔案或其他形式檔案類型的集合。 資料庫檔案可以使frm,MYD,MYI,ibd結尾的檔案。
執行個體:MySQL資料庫由後台線程以及一個共用記憶體區組成。 資料庫執行個體才是真正用於操作資料庫檔案的。
執行個體與資料庫的關係通常是一一對應的,在叢集情況下可能存在一個資料庫被多個資料執行個體使用的情況。
MySQL被設計為一個單進程多線程架構的資料庫,這點與SQL Server比較類似,但與Oracle多進程的架構有所不同(Oracle的Windows版本也是單進程多線程的架構的)
MySQL資料庫執行個體在系統上的表現就是一個進程。
Oracle 中如果沒有參數檔案,在啟動執行個體時會提示找不到該參數檔案,資料庫啟動失敗。而在MySQL資料庫中,可以沒有設定檔,在這種情況下,MySQL會按照編譯時間的預設
參數設定啟動執行個體。
MySQL 資料庫是按 /etc/my.cnf -->/etc/mysql/my.cnf-->/usr/local/mysql/etc/my.cnf-->~/.my.cnf 的順序讀取設定檔。如果幾個設定檔中都有同一個參數,MySQL資料庫以讀取到的最後一個設定檔中的參數為準。 在Linux環境下,設定檔一般放在 /etc/my.cnf 下。在Windows平台下,設定檔的尾碼名可能是.cnf,也可能是.ini。
設定檔中有一個參數datadir,該參數指定了資料庫所在的路徑。在Linux作業系統下預設datadir為/usr/local/mysql/data
可以用命令查看 mysql > SHOW VARIABLES LIKE ‘datadir’\G;
1.2 MySQL體繫結構
從概念上來說,資料庫是檔案的集合,是依照某種資料模型組織起來並存放於二級儲存空間中的資料集合;資料庫執行個體時是程式,是位於使用者與作業系統之間的一層資料管理軟體,使用者對資料庫資料的任何操作,包括資料庫定義、資料查詢、資料維護、資料庫運行控制等都是在資料庫執行個體下進行的,應用程式只有通過資料庫執行個體才能和資料庫打交道。
MySQL由以下幾部分組成:
串連池組件、管理服務和工具組件、SQL介面組件、查詢分析器組件、最佳化器組件、緩衝組件、外掛程式式儲存引擎、物理檔案。
需要特別注意的是,儲存引擎是基於表的,而不是資料庫。
1.3 MySQL儲存引擎
1.3.1 InnoDB儲存引擎
InnoDB儲存引擎支援事物,面向線上是事物處理(OLTP)的應用。其特點是行鎖設計、支援外鍵,並支援類似於Oracle的非鎖定讀,即預設讀取操作不會產生鎖。
從MySQL4.1(包括4.1)版本開始,InnoDB儲存引擎的表單獨存放到一個獨立的ibd檔案中。此外,InnoDB儲存引擎支援用裸裝置用來建立其資料表空間。
如果沒有顯示地定義時指定主鍵,InnoDB儲存引擎會為每一行產生一個6位元組的ROWID,並以此作為主鍵。
1.3.2 MyISAM儲存引擎
MyISAM儲存引擎不支援事務、表鎖設計,支援全文檢索索引,主要面向一些OLAP資料庫應用。在MySQL5.5.8版本之前MyISAM儲存引擎是預設的儲存引擎(除Windows版本外)。 MyISAM儲存引擎的緩衝池只緩衝索引檔案,而不緩衝資料檔案。
MyISAM儲存引擎表由MYD和MYI組成,MYD用來存放資料檔案,MYI用來存放索引檔案。 使用myisampack工具壓縮後的表是唯讀。
在MySQL5.0版本之前,MyISAM預設支援的表大小為4GB, 5.0之後預設支援256TB的單表資料。
1.3.3 NDB儲存引擎
NDB儲存引擎是一個叢集儲存引擎 更高的可用性 資料全部放在記憶體中(5.1版本後 可以將非索引資料放在磁碟上) 是高可用、高效能的叢集系統。
NDB儲存引擎的串連操作是在MySQL資料庫層完成的,而不是在儲存引擎層完成的。這意味著,複雜的串連操作需要巨大的網路開銷,因此查詢速度很慢。如果解決了這個問題,NDB儲存引擎的市場應該非常巨大。
1.3.4 Memory 儲存引擎
Memory 儲存引擎(之前稱為HEAP儲存引擎)將表中的資料存放在記憶體中,如果資料重啟或發生崩潰,表中的資料都將消失。
不支援TEXT和BLOB列類型。
1.3.5 Archive 儲存引擎
Archive儲存引擎只支援INSERT和SELECT操作,從MySQL5.1開始支援索引。
Archive儲存引擎非常適合儲存歸檔資料,如日誌資訊。Archive儲存引擎使用行鎖來實現高並發的插入操作,但其本身並不是事物安全的儲存引擎,其設計目標主要是提供高速的插入和壓縮功能。
1.3.6 Federated儲存引擎
Federated儲存引擎表並不存放資料,它只是指向一台遠端資料庫伺服器上的表。
1.3.7 Maria儲存引擎
可以看做是MyISAM的後續版本。Maria儲存引擎的特點是:支援快取資料和索引檔案,應用了行鎖設計,提供了MVCC功能,支援事物和非事務安全的選項,以及更好的BLOB字元類型的處理效能。
mysql > SHOW ENGINES\G; //查看支援的儲存引擎
1.5 串連MySQL
串連MySQL操作是一個串連進程和MySQL資料庫執行個體進行通訊。 進程通訊的方式有管道、具名管道、命名字、TCP/IP通訊端、UNIX域通訊端。
TCP/IP是基於網路的,而通訊端一般用於同一台伺服器。
例:
TCP/IP : C:\ > mysql -h 192.168.0.101 -u david -p
UNIX域通訊端: mysql -udavid -S /tmp/mysql.sock
1.6 小結
資料庫和執行個體定義
體繫結構 進一步突出 執行個體和資料庫
MySQL外掛程式式儲存引擎
MySQL儲存引擎無優劣差異只有適合不適合。
《MySQL技術內幕InnoDB儲存引擎》讀書筆記 第一章