MySQL體系結構

MySQL 體系結構及存儲引擎

體系結構

MySQL體系結構mysql

鏈接者:不一樣語言的代碼程序和mysql的交互(SQL交互)
一、鏈接池 管理、緩衝用戶的鏈接,線程處理等須要緩存的需求
二、管理服務和工具組件 系統管理和控制工具,例如備份恢復、Mysql複製、集羣等 
三、sql接口 接受用戶的SQL命令,而且返回用戶須要查詢的結果
四、查詢解析器 SQL命令傳遞到解析器的時候會被解析器驗證和解析(權限、語法結構)
五、查詢優化器 SQL語句在查詢以前會使用查詢優化器對查詢進行優化
select id,name from user where age = 40; 
a、這個select 查詢先根據where 語句進行選取,而不是先將表所有查詢出來之後再進行age過濾 
b、這個select查詢先根據id和name進行屬性投影,而不是將屬性所有取出之後再進行過濾 
c、將這兩個查詢條件聯接起來生成最終查詢結果
六、緩存 若是查詢緩存有命中的查詢結果,查詢語句就能夠直接去查詢緩存中取數據
七、插入式存儲引擎 存儲引擎說白了就是如何管理操做數據(存儲數據、如何更新、查詢數據等)的一種方法。由於在關係數據庫
中數據的存儲是以表的形式存儲的,因此存儲引擎也能夠稱爲表類型(即存儲和操做此表的類型)

說明:
在Oracle 和SQL Server等數據庫中,全部數據存儲管理機制都是同樣的。而MySql數據庫提供了多種存儲引擎。
用戶能夠根據不一樣的需求爲數據表選擇不一樣的存儲引擎,用戶也能夠根據本身的須要編寫本身的存儲引擎。
甚至一個庫中不一樣的表使用不一樣的存儲引擎,這些都是容許的。
sql

 存儲引擎

MyISAM存儲引擎

因爲該存儲引擎不支持事務、也不支持外鍵,因此訪問速度較快。所以當對事務完整性沒有要求並以訪問爲主的應用適合使用該存儲引擎。數據庫

InnoDB存儲引擎

mysql 5.5版本之後默認的存儲引擎
因爲該存儲引擎在事務上具備優點,即支持具備提交、回滾及崩潰恢復能力等事務特性,因此比MyISAM存儲引擎佔用更多的磁盤空間。所以當須要頻繁的更新、刪除操做,同時還對事務的完整性要求較高,須要實現併發控制,建議選擇。數組

MEMORY

MEMORY存儲引擎存儲數據的位置是內存,所以訪問速度最快,可是安全上沒有保障。適合於須要快速的訪問或臨時表。緩存

BLACKHOLE

黑洞存儲引擎,寫入的任何數據都會消失,能夠應用於主備複製中的分發主庫。安全

物理文件

物理文件包括:日誌文件,數據文件,配置文件,pid文件,socket文件等服務器

日誌文件

 

error log  錯誤日誌    排錯  /var/log/mysqld.log【默認開啓】
bin log    二進制日誌  備份  增量備份 DDL DML DCL
Relay log  中繼日誌    複製  接收 replication master
slow log   慢查詢日誌  調優  查詢時間超過指定值

 Error Log

log-error=/var/log/mysqld.log

 Binary Log

log-bin=/var/log/mysql-bin/bin.log
server-id=2 5.7.x版本後

Slow Query Log

slow_query_log=1|0
slow_query_log_file=/var/log/mysql-slow/slow.log
long_query_time=3

 配置文件

/etc/my.cnf—>/etc/mysql/my.cnf—>/usr/etc/my.cnf—> ~/.my.cnf
若是衝突,以最後一個讀取的爲準
[mysqld]組中包括了mysqld服務啓動時的初始化參數
[client]組中包含着客戶端工具程序能夠讀取的參數,此外還有其餘針對各個客戶端軟件的特定參數組等

 數據文件

1、.frm文件
不管是什麼存儲引擎,每個表都會有一個以表名命名的.frm文件,與表相關的元數據(meta)信息都存放在此文件中,包括表結構的定義信息等。
2、.MYD文件
myisam存儲引擎專用,存放myisam表的數據(data)。每個myisam表都會有一個.MYD文件與之呼應,一樣存放在所屬數據庫的目錄下
3、.MYI文件
也是myisam存儲引擎專用,存放myisam表的索引相關信息。對於myisam存儲引擎來講,能夠被緩存(cache)的內容主要就是來源於.MYI文件中。
每個myisam表對應一個.MYI文件,其存放的位置和.frm及.MYD同樣
4、.ibd文件和ibdata文件
存放innoDB的數據文件(包括索引)。innoDB存儲引擎有兩種表空間方式:獨享表空間和共享表空間。
獨享表空間:使用.ibd文件來存放數據,且每一個表一個.ibd文件,文件存放在和myisam數據相同的位置。
共享表空間:使用.ibdata文件,全部表共同使用一個(或多個,自行配置)ibdata文件。

ibdata1:系統表空間(數據文件)undo 段
ib_logfile0   redlog文件  一組
ib_logfile1

五、db.opt文件    此文件在每個自建的庫裏都會有,記錄這個庫的默認使用的字符集和校驗規。

pid文件

pid文件是mysqld應用程序在Unix/Linux環境下的一個進程文件,和許多其餘Unix/Linux服務端程序同樣,它存放着本身的進程id

 socket文件

socket文件也是在Unix/Linux環境下才有的,用戶在Unix/Linux環境下客戶端鏈接能夠不經過TCP/IP網絡而直接使用Unix Socket來鏈接mysql.

 區分數據庫、數據庫實例、數據庫服務器

 數據庫(database)

數據庫(database):
操做系統或存儲上的數據文件的集合。mysql數據庫中,數據庫文件能夠是* .frm、*.MYD、*.MYI、*.ibd等結尾的文件,
不一樣存儲引擎文件類型不一樣。

 數據庫實例(instance)

由後臺進程或者線程以及一個共享內存區組成。共享內存能夠被運行的後臺線程所共享。
須要注意:數據庫實例纔是真正操做數據庫的。
    
數據庫和數據庫實例的關係:
一般狀況下,數據庫實例和數據庫是一一對應的關係,也就是一個數據庫實例對應一個數據庫;
可是,在集羣環境中存在多個數據庫實例共同使用一個數據庫。

 數據庫服務器(database server)

數據庫服務器(database server):部署安裝數據庫實例的服務器。
mysql中的邏輯對象:
mysqld_process+memory+datafile|logfile|pidfile...--->庫-->表-->記錄(由行與列組成)

 mysql 數據庫的幫助

1、官檔
2、man 文檔
三、命令行下的幫助文件      --oracle命令行沒有,須要去查官方文檔
mysql > help;
mysql > help create table;
mysql> ? contents
        --分了不少類
   Account Management
   Administration
   Data Definition
   Data Manipulation
   Data Types
   Functions
   Functions and Modifiers for Use with GROUP BY
   Geographic Features
   Language Structure
   Storage Engines
   Stored Routines
   Table Maintenance
   Transactions
   Triggers

mysql> ? Account Management    --一級一級的向內部查

mysql> ? CREATE USER
相關文章
相關標籤/搜索