MySQL 體系結構及存儲引擎
體系結構
MySQL體系結構
連接者:不同語言的代碼程序和mysql的交互(SQL交互)
1、連接池 管理、緩沖用戶的連接,線程處理等需要緩存的需求
2、管理服務和工具組件 系統管理和控制工具,例如備份恢復、Mysql復制、集群等
3、sql接口 接受用戶的SQL命令,並且返回用戶需要查詢的結果
4、查詢解析器 SQL命令傳遞到解析器的時候會被解析器驗證和解析(權限、語法結構)
5、查詢優化器 SQL語句在查詢之前會使用查詢優化器對查詢進行優化
select id,name from user where age = 40;
a、這個select 查詢先根據where 語句進行選取,而不是先將表全部查詢出來以后再進行age過濾
b、這個select查詢先根據id和name進行屬性投影,而不是將屬性全部取出以后再進行過濾
c、將這兩個查詢條件聯接起來生成最終查詢結果
6、緩存 如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據
7、插入式存儲引擎 存儲引擎說白了就是如何管理操作數據(存儲數據、如何更新、查詢數據等)的一種方法。因為在關系數據庫
中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)
說明:
在Oracle 和SQL Server等數據庫中,所有數據存儲管理機制都是一樣的。而MySql數據庫提供了多種存儲引擎。
用戶可以根據不同的需求為數據表選擇不同的存儲引擎,用戶也可以根據自己的需要編寫自己的存儲引擎。
甚至一個庫中不同的表使用不同的存儲引擎,這些都是允許的。
存儲引擎
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 5、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 文檔 3、命令行下的幫助文件 --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