《MySQL技術內幕InnoDB存儲引擎》讀書筆記 第一章

Mysql體系結構和存儲引擎mysql

1.1 定義數據庫和實例sql

  數據庫:物理操做系統文件或其餘形式文件類型的集合。    數據庫文件可使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存儲引擎無優劣差別只有適合不適合。

相關文章
相關標籤/搜索