1.mysql 的架構介紹

Mysql簡介

https://baike.baidu.com/item/mySQL/471251?fr=aladdinmysql

MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 是最流行的關係型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關係數據庫管理系統) 應用軟件。linux

MySQL是一種關係數據庫管理系統,關係數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。算法

MySQL所使用的 SQL 語言是用於訪問數據庫的最經常使用標準化語言。MySQL 軟件採用了雙受權政策,分爲社區版和商業版,因爲其體積小、速度快、整體擁有成本低,尤爲是開放源碼這一特色,通常中小型網站的開發都選擇 MySQL 做爲網站數據庫。sql

因爲其社區版的性能卓越,搭配 PHPApache 可組成良好的開發環境。數據庫

高級MySQL

mysql內核、sql優化工程師、mysql服務器的優化、查詢語句優化、主重複制、軟硬件升級、容災備份、sql編程 ​完整的mysql優化須要很深的功底,大公司甚至有專門的DBA編程

MysqlLinux版本的安裝--mysql5.5

mysql5.5下載地址:https://dev.mysql.com/downloads/mysql/ 檢查當前系統是否安裝過mysqlwindows

能夠用 rpm -qa|grep mysql看當前的系統進程,若是有mysql服務的就會顯示的。緩存

安裝mysql服務端(注意提示) 安裝mysql客戶端 查看Mysql安裝時建立的mysql用戶和mysql組安全

cat /etc/passwd | grep mysql
cat /etc/group | grep mysql

mysql服務的啓+停:service mysql start服務器

mysql服務啓動後開始鏈接 首次鏈接成功 注意這裏,,由於mysql默認沒有密碼,因此這裏咱們沒有輸入密碼就直接連上了 按照安裝Service中的提示修改登陸密碼:/usr/bin/mysqladmin -u root password root 自啓動mysql服務

chkconfig --list | grep mysql 
chkconfig mysql on
ntsysv  查看自啓動的服務

修改配置文件位置

5.5 版本  /usr/share/mysql/my-huge.cnf
cp my-huge.cnf /etc/my.cnf
5.6之後  /usr/share/mysql/my-default.cnf

修改字符集和數據存儲路徑

1.查看字符集
show variables like 'character%';
建議先對文件進行備份,不過由於文件原本就是從/usr/share/mysql中複製過來的,也能夠不用備份,而後打開
cp my.cnf my.cnf.bak  
sudo vi my.cnf  
在[mysqld]上面加入下面兩句話
[client]    
default-character-set=utf8   
在[mysqld]最下面加入下面幾句話
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
若是一張表在修改字符集以前就建立,那麼修改字符集以後對該表不起做用,只對後來建立的表起做用

Mysql的安裝位置 在linux下查看安裝目錄 ps -ef | grep mysql

/var/lib/mysql                     mysql數據庫文件的存放位置           
  /var/lib/mysqlatguigu.clouf.pif /usr/share/mysql 配置文件目錄   mysql.serve命令以及配置文件 /usr/bin 相關命令目錄
  mysqladmin mysqldump 等命令
/etc/init.d/mysql 啓停相關腳本

Mysql配置文件

  1.主要配置文件

    二進制日誌log-bin

      主重複制

    錯誤日誌log-error 默認是關閉的,記錄嚴重的警告和錯誤信息,每次啓動和關閉的詳細信息等.

     查詢日誌log 默認關閉,記錄查詢的sql語句,若是開啓會減低mysql的總體性能,由於記錄日誌也是須要消耗系統

  2.資源的

    數據文件

       兩系統

      windows D:\ProgramFiles\MySQL\MySQLServer5.5\data目錄下能夠挑選不少庫

      linux 看看當前系統中的所有庫後再進去 默認路徑:/var/lib/mysql

    frm文件:存放表結構

    myd文件:存放表數據

    myi文件:存放表索引

              也有版本的mysql:

        .ibd是MySQL數據文件、索引文件,沒法直接讀取。
        .frm是表結構文件,能夠直接打開。

  3.如何配置

     windows:my.ini文件

    Linux:/etc/my.cnf文件

 Mysql邏輯架構介紹

1.鏈接層:最上層是一些客戶端和鏈接服務,包含本地sock通訊和大多數基於客戶端/服務端工具實現的相似tcp/ip的通訊。主要完成一些相似於鏈接處理、受權認證以及相關的安全方案。在該層上引發了線程池的的概念,爲經過認證安全接入的客戶端提供線程。一樣在該層上能夠實現基於SSL的安全鏈接。服務器也會爲安全接入的每一個客戶端驗證它鎖具備的操做權限。

2.服務層:第二層架構主要完成大多數的核心服務功能。如SQL接口,並完成緩存的查詢。SQL的分析和優化以及部份內置函數的執行。全部跨存儲引擎的功能也在這層實現。如過程、函數等、在該層,服務器會解析查詢並建立相應的內部解析樹,並對其完成相應的優化如肯定查詢表的順序,是否利用索引等。最後生成相應的執行操做。若是是select語句。服務器會查詢內部的緩存。若是緩存空間足夠大,這樣在解決大量讀操做的環境中可以很好的提升系統的性能。

3.引擎層:存儲引擎層,存儲引擎真正的負責mysq中數據的存儲和提取。服務器經過API與存儲引擎進行通訊。不一樣的存儲引擎具備的功能不一樣。這樣咱們能夠根據本身的實際須要進行選取。經常使用的有Innodb、MyIsam等

4.存儲層:數據存儲層,主要將數據存儲在運行於裸設備的文件系統上,並完成與存儲引擎的交互。

和其餘數據庫相比,mysql有點不同凡響,她的架構能夠在多種不一樣的場景中應用併發揮良好做用,主要體如今存儲引擎的架構上。 插件式的存儲引擎架構將查詢處理和其

他的系統任務以及數據的存儲,提取相分離。這種架構能夠根據業務的需求和實際須要選擇合適的存儲引擎

鏈接層 -服務層-引擎層-存儲層

1.Connectors 指的是不一樣語言中與SQL的交互

2. Management Serveices & Utilities: 系統管理和控制工具

3 .Connection Pool: 鏈接池 管理緩衝用戶鏈接,線程處理等須要緩存的需求。 負責監聽對 MySQL Server 的各類請求,接收鏈接請求,轉發全部鏈接請求到線程管理模塊。每個鏈接上 MySQL Server 的客戶端請求都會被分配 (或建立)一個鏈接線程爲其單獨服務。而鏈接線程的主要工做就是負責 MySQL Server 與客戶端的通訊, 接受客戶端的命令請求,傳遞 Server 端的結果信息等。線程管理模塊則負責管理維護這些鏈接線程。包括線程的建立,線程的 cache 等。

4 SQL Interface: SQL接口。 接受用戶的SQL命令,而且返回用戶須要查詢的結果。好比select from就是調用SQL Interface

5 Parser: 解析器。 SQL命令傳遞到解析器的時候會被解析器驗證和解析。解析器是由Lex和YACC實現的,是一個很長的腳本。 在 MySQL中咱們習慣將全部 Client 端發送給Server 端的命令都稱爲 query ,在 MySQL Server 裏面,鏈接線程接收到客戶端的一個 Query 後, 會直接將該 query 傳遞給專門負責將各類 Query 進行分類而後轉發給各個

對應的處理模塊。

主要功能:

   a . 將SQL語句進行語義和語法的分析,分解成數據結構,而後按照不一樣的操做類型進行分類,而後作出針對性的轉發到後續步驟,之後SQL語句的傳遞和處理就是基於這個結構的。

  b. 若是在分解構成中遇到錯誤,那麼就說明這個sql語句是不合理的

6 Optimizer: 查詢優化器。 SQL語句在查詢以前會使用查詢優化器對查詢進行優化。就是優化客戶端請求的 query(sql語句) ,根據客戶端請求的 query 語句,和數據庫中的一些統計信息,在一系列算法的基礎上進行分析,得出一個最優的策略,告訴後面的程序如何取得這個 query 語句的結果 他使用的是「選取-投影-聯接」策略進行查詢。 ​ 用一個

例子就能夠理解: select uid,name from user where gender = 1; ​ 這個select 查詢先根據where 語句進行選取,而不是先將表所有查詢出來之後再進行gender過濾 ​ 這個select查詢先根據uid和name進行屬性投影,而不是將屬性所有取出之後再進行過濾 ​ 將這兩個查詢條件聯接起來生成最終查詢結果

7 Cache和Buffer: 查詢緩存。 他的主要功能是將客戶端提交 給MySQL 的 Select 類 query 請求的返回結果集 cache 到內存中,與該 query 的一個 hash 值 作一個對應。該 Query所取數據的基表發生任何數據的變化以後, MySQL 會自動使該 query 的Cache 失效。在讀寫比例很是高的應用系統中, Query Cache 對性能的提升是很是顯著的。固然它對內存

的消耗也是很是大的。 若是查詢緩存有命中的查詢結果,查詢語句就能夠直接去查詢緩存中取數據。這個緩存機制是由一系列小緩存組成的。好比表緩存,記錄緩存,key緩存,權限緩存等

8 、存儲引擎接口 存儲引擎接口模塊能夠說是 MySQL 數據庫中最有特點的一點了。目前各類數據庫產品中,基本上只有 MySQL 能夠實現其底層數據存儲引擎的插件式管理。這個模塊實際上只是 一個抽象類,但正是由於它成功地將各類數據處理高度抽象化,才成就了今天 MySQL 可插拔存儲引擎的特點。 ​ 從圖2還能夠看出,MySQL區別於其餘數據庫的最重

要的特色就是其插件式的表存儲引擎。MySQL插件式的存儲引擎架構提供了一系列標準的管理和服務支持,這些標準與存儲引擎自己無關,多是每一個數據庫系統自己都必需的,如SQL分析器和優化器等,而存儲引擎是底層物理結構的實現,每一個存儲引擎開發者均可以按照本身的意願來進行開發。

注意:存儲引擎是基於表的,而不是數據庫。

查詢說明 Mysql存儲引擎

#查看命令
show engines; 查看引擎
show variables like '%storage_engine%';#查看默認與當前的存儲引擎

MyISAM和InnoDB

 

對比項 MyISAM InnoDB
主外鍵 不支持 支持
事務 不支持 支持
行表鎖

表鎖,即便操做一條記錄也會鎖住整個表,不適合高併發的

行鎖,操做時候只鎖住某一行,不對其餘行有影響

適合高併發的操做操做

緩存 只緩存索引,不緩存真實數據 不只緩存索引還要緩存真實數據,對內存要求.比較高,並且內存大小對性能有決定性的影響
表空間
關注點 性能 事務
默認安裝 安裝 安裝
相關文章
相關標籤/搜索