Mysql基礎

1.1 數據庫簡介


簡單的說數據庫(database)就是一個存儲數據的倉庫,它將數據按照必定規律存儲到磁盤上,經過數據庫管理系統,可以有效的管理存儲在數據庫中的數據
(1)Mysql的基礎知識
(2)SQL應用
(3)Mysql事務
(4)Mysql權限以及監控
(5)Mysql調優
(6)Mysql備份和恢復
(7)Mysql集羣和複製

DBMS(database manager system)
在DBMS出現以前,都是用文件來進行數據管理,會出現一下問題:
(1)數據冗餘
(2)數據一致性
(3)數據訪問困難
(4)數據是孤立的
(5)完整性問題
(6)原子性問題
(7)併發訪問異常問題
(8)安全性問題
DBMS解決了什麼問題?

mysql

1.2 Mysql體系結構


Mysql被設計成一個可移植的數據庫,幾乎能夠在全部的操做系統運行(Linux Unix Windows)

定義數據庫和實例
實例和數據庫
數據庫:以物理文件的方式存儲在磁盤上面(.frm .myd .idb 後綴的文件存儲)
NDB存儲引擎,它的數據庫文件,在內存當中

實例:由數據庫後臺進程/線程以及一個個共享內存區域組成
數據庫實例纔是用來操做數據庫文件的
每一個實例都是以單進程方式存在

數據庫:實例 1:1
好比在特殊的集羣當中,可能會出現一個數據庫被多個實例操做

web

1.3 Mysql微觀結構



概述整個數據庫邏輯執行過程?
流程圖詳解:
全部的用戶鏈接請求都是先發往鏈接管理器的,鏈接管理器(是一個偵聽器)用於偵聽來自客戶端的鏈接,並接受用戶請求,用戶請求被接收下來,而一個用 戶請求須要一個線程來響應,所以須要一個線程管理器。線程管理器負責給用戶建立生成新的線程或完成線程重置的方式給用戶一個響應線程,用戶鏈接進來後須要 檢查用戶權限(是否容許訪問mysql服務器等等權限)。這時就須要用戶模塊出場了,用戶模塊負責管理用戶是否可以鏈接的,這是管理權限的第一關,若是用 戶不能請求,那用戶請求就終止了,所以用戶模塊還負責退回用戶請求(主要做用是驗證用戶請求和用戶身份的)。
一旦用戶具備鏈接的權限,那用戶就能夠發一些SQL語句,而每個SQL語句須要進行分析,不一樣的語句須要分配給不一樣的解析器,所以就須要命令分發 模塊,就把這些不一樣類型的語句分配給與之對應的解析器上去。若是命令在分發以前是一個查詢語句,並且咱們的緩存中有內容,就能夠直接返回給用戶結果了,因 此也有可能會跟緩存模塊進行交互。當用戶發起一個命令以後,例如咱們的web,當用戶請求資源後,都會記錄在日誌中的,所以命令分發模塊也有可能會和日誌 模塊進行交互的,日誌模塊的主要功能是記錄用戶查詢的。緩存模塊和日誌模塊並非並行的,命令分發模塊給二者都有可能有交互的。
若是緩存中沒有就要將用戶請求的命令分發出去,將命令交給解析器(解析查詢生成解析數),由解析器判斷命令最終屬於哪一種語句,若是解析器解析此命令 是select語句,須要交給優化器進行優化。若是是update、insert、delete語句,須要交給表定義模塊(這一過程也要進行權限的判 斷)。mysql也有與repair相關的語句,那可想而知須要表維護模塊了,表維護模塊主要做用是修復表中的某些邏輯錯誤的。mysql中也有不少狀態 變量,而這些狀態變量也須要狀態報告模塊來存儲每個執行過程當中的狀態信息。mysql也有複製的功能,把主mysql服務器上的數據同步到從mysql 服務器上的過程,這就是複製模塊的功能。
不管哪一個模塊,用戶最終要完成操做,必需要檢查用戶是否具備權限,上面所說的表定義模塊、表維護模塊都須要檢查用戶權限,所以最終這些命令語句都要 交給訪問控制模塊來控制:用於檢驗客戶端用戶的操做是否具備足夠的操做權限,來執行請求操做若是訪問模塊檢查後發現沒有任何問題,會把這些命令語句交給另 一個組件表管理器,由表管理器完整真正意義上的操做,表管理器負責建立、讀取或修改表定義文件的。表管理器交給存儲引擎(存儲引擎的接口),存儲引擎交給 最核心的-->MYISAM或INnoDB。

sql

1.4 SQL語言


DBMS是經過SQL語言來進行數據庫管理的。SQL語言是一種查詢和設計語言。
主要用於存儲數據,查詢數據 更新和管理關係數據庫
SQL語言總共分爲三個部分
DDL(Data Definition Language)語句,用於定義數據庫表、視圖索引和觸發器等
create
alter
drop
rename
truncate
comment

DML(Data Maniplulation Language)語句,用於插入數據、查詢數據以及更新數據、刪除數據
select
insert
update
delete

DCL(Data Control Language)語句,用戶控制用戶的訪問權限
grant
revoke

數據庫

1.5 常見的數據庫系統


1.甲骨文Oracle
2.IBMDB2
3.Sybase
4.微軟Access和SQL Server
5.開源PostgreSQL
6.開源Mysql

windows

1.6 Mysql數據庫介紹


Mysql是一個關係數據庫管理系統,最初由瑞典MYSQL AB公司開發的,目前屬於ORACLE公司
Mysql是一種關聯數據庫系統,關聯數據庫將數據保存在不一樣的表中,而不是將全部的數據放在一個大的倉庫內,這樣增長了速度提升了靈活性
Mysql是一個開源的小型關聯數據庫管理系統,Mysql被普遍的應用到了internet上的中小型企業。因爲體積小,速度快,整體擁有成本低。

Mysql特性:
1.跨平臺,支持多種操做系統,AIX Free HP-UX Linux MacOS NovellNetWare OpenBSD Solaris windows 等等
2.支持多線程,能夠充分的利用硬件資源(CPU資源)
3.支持大型數據庫,能夠處理擁有上千萬條大型數據庫
4.支持多種插件式存儲引擎

Mysql版本
5.0--》5.1--》5.2--》5.3--》5.4--》5.5--》5.6--》5.7
Alpha 開發版
Beat 測試版
Gama 發行一個段時間的Beat版本
Generally Avalilable(GA) 穩定版
以上版本之間有什麼區別?
5.0
1,視圖,觸發器,存儲過程和存儲函數
2,遊標
3,xa分佈式事務
2,Federated引擘
5.1
1,Sun收購後的版本
2,分區表
3,行復制.
4,BerkeleyDB移出
5,Federated were deprecated
6,Oracle推出InnoDB plugin版本
7,Event
8,Plugin API
9,Pluggable storage engine API
10,日誌表
11,增強information_schema
12,mysqlslap
13,慢查詢閥值可設置爲毫秒
5.2
5.3
5.4
5.5
1,Oracle收購後的版本
2,InnoDB變爲默認引擘
3,加入performance_schema庫,監控MySQL服務器運行時的性能
4,半同步複製
5,多緩衝池實例
6,Supplementary Unicode characters
7,多核利用率提升
8,增強SHOW ENGINE INNODB STATUS輸出
9,分區支持新增RANGE COLUMNS,LIST COLUMNS
10,ALTER TABLE … TRUNCATE PARTITION
11,TO_SECONDS() function
12,編譯採用cmake
13,多個回滾段(Multiple Rollback Segments)
14,提升了默認線程併發數,設置innodb_thread_concurrency
15,後臺輸入/輸出線程控制,設置innodb_read_io_threads和innodb_write_io_threads
16,主線程輸入/輸出速率控制,設置innodb_io_capacity
17,能夠關閉適應性散列索引功能
18,能夠關閉InnoDB的插入緩衝
19,恢復組提交(Restored Group Commit)
20,快速恢復重啓
21,MySQL 5.5爲基於Linux和Windows的數據庫系統提供了真實的異步輸入/輸出支持。若是新的默認設置與主機輸入/輸出子系統不兼容,要使用該功能,須要在Linux系統中安裝libaio用戶空間庫,並配置innodb_use_native_aio選項參數(該參數能夠關閉)
22,使用innodb_change_buffering配置參數來控制刪除緩衝和既有插入緩衝功能,默認在全部的系統中都使用
23,每個緩衝池實例都有一個單獨的刷新(Flush)列表互斥,從而進一步減小了爭用
24,設置innodb_purge_threads配置參數來選擇清除操做是否使用單獨線程
25,禁止會話執行另外一個會話中,未完成事務處理正在使用的表格中的DDL語句,可以保證事務處理的串行化
26,Linux系統中,在高事務處理頻率和鏈接負載的狀況下,MySQL5.5在處理只讀(Read Only)操做時的性能和可擴展性是MySQL5.1的200%,處理讀/寫操做時的性能和可擴展性是MySQL5.1的370%
27,複製Heartbeat
28,relay_log_recovery,自動丟棄本身未處理的中繼日誌(Relay Log),而後從源主機服務器恢復掛起的事務處理
29,根據服務器過濾項複製
30,SLAVE_TYPE_CONVERSION,提供了一種精確的數據類型轉換機制
31,創建快速索引,添加(Add)或刪除(Drop)索引,而無需複製整個目標表中的底層數據
32,數據壓縮,ROW_FORMAT和KEY_BLOCK_SIZE參數,按照1K,2K,4K,8K或標準16K字節壓縮等級存儲數據頁。
33,ROW_FORMAT=DYNAMIC或ROW_FORMAT=COMPRESSED建立表,這提升了大對象的存儲效率
34,存儲對象(包括存儲過程,函數,觸發器)內部使用SIGNAL/RESIGNAL語法,用於項目的前期研發和調試,而後產生錯誤條件,並使用該條件調用主機應用程序中的專用錯誤處理程序
35,表和索引RANG和LIST分區範圍擴展到了非整數列和日期,並增長了在多個列上分區的能力,COLUMNS關鍵字支持這些選項
5.6
1,查詢優化:Index Condition Pushdown,Multi-Range Read,File Sort Optimization
2,增強performance_schema庫
3,Dump/Restore buffer pool for fast start up
4,UUID惟一標識服務器,內部事務序列產生全局惟一GTID
5,自動回滾複製到一半的事務並重作整個事務
6,row格式Binlog中只記必需字段
7,延時複製
8,遠程Binlog備份
9,row格式複製記錄SQL語句
10,kernel mutex splits into different mutexes
11,InnoDB 全文搜索
12,Online add index,Add / Drop Foreign Key,Add / Drop Column,Rename Table,Rename Column
13,Transportable Tablespaces
14,Direct Access to InnoDB via Memcached
15,innodb壓縮加強
16,improved accuracy of InnoDB index statistics, and consistency across MySQL restarts
17,NoSQL Interface via memcached
18,分區加強:Explicit Partition Selection–SELECT * FROM employees PARTITION (p0, p2),Import / Export for Partitioned Tables-ALTER TABLE e EXCHANGE PARTITION p0 WITH TABLE e2
19,多線程複製,數據庫級別
20,Replication Checksums
21,Hash Join
22,Read-Only事務區分
23,5.6.6峯值最高能夠達到16w的QPS,比原版的5.1提高4倍(使用flash設備)
5.7
1. 性能和可擴展性:改進 InnoDB 的可擴展性和臨時表的性能,從而實現更快的網絡和大數據加載等操做。
2. JSON支持:使用 MySQL 的 JSON 功能,你能夠結合 NoSQL 的靈活和關係數據庫的強大。
3. 改進複製 以提升可用性的性能。包括多源複製,多從線程加強,在線 GTIDs,和加強的半同步複製。
4. 性能模式 提供更好的視角。咱們增長了許多新的監控功能,以減小空間和過載,使用新的 SYS 模式顯著提升易用性。
5. 安全: 咱們貫徹「安全第一」的要求,許多 MySQL 5.7 新功能幫助用戶保證他們數據庫的安全。
6. 優化: 咱們重寫了大部分解析器,優化器和成本模型。這提升了可維護性,可擴展性和性能。
7. GIS: MySQL 5.7 全新的功能,包括 InnoDB 空間索引,使用 Boost.Geometry,同時提升完整性和標準符合性。


緩存

1.7 如何學習數據庫?


學習數據庫主要多練習,
多上機實踐
多編寫SQL
多回顧理論知識

安全

1.8 本章練習題目


1.常見的數據庫系統有那些
1.甲骨文Oracle
2.IBMDB2
3.Sybase
4.微軟Access和SQL Server
5.開源PostgreSQL
6.開源Mysql
2.SQL語言分爲哪幾種,請詳細描述
SQL語言總共分爲三種
DDL(Data Definition Language)語句,用於定義數據庫表、視圖索引和觸發器等
create
alter
drop
rename
truncate
comment
DML(Data Maniplulation Language)語句,用於插入數據、查詢數據以及更新數據、刪除數據
select
insert
update
delete
DCL(Data Control Language)語句,用戶控制用戶的訪問權限
grant
revoke
3.Mysql 5.5 5.6 5.7 之間有什麼區別
5.5
5.6
5.7
1. 性能和可擴展性:改進 InnoDB 的可擴展性和臨時表的性能,從而實現更快的網絡和大數據加載等操做。
2. JSON支持:使用 MySQL 的 JSON 功能,你能夠結合 NoSQL 的靈活和關係數據庫的強大。
3. 改進複製 以提升可用性的性能。包括多源複製,多從線程加強,在線 GTIDs,和加強的半同步複製。
4. 性能模式 提供更好的視角。咱們增長了許多新的監控功能,以減小空間和過載,使用新的 SYS 模式顯著提升易用性。
5. 安全: 咱們貫徹「安全第一」的要求,許多 MySQL 5.7 新功能幫助用戶保證他們數據庫的安全。
6. 優化: 咱們重寫了大部分解析器,優化器和成本模型。這提升了可維護性,可擴展性和性能。
7. GIS: MySQL 5.7 全新的功能,包括 InnoDB 空間索引,使用 Boost.Geometry,同時提升完整性和標準符合性。
4.請簡述Mysql特性以及發行版本.
Mysql特性:
1.跨平臺,支持多種操做系統,AIX Free HP-UX Linux MacOS NovellNetWare OpenBSD Solaris windows 等等
2.支持多線程,能夠充分的利用硬件資源(CPU資源)
3.支持大型數據庫,能夠處理擁有上千萬條大型數據庫
4.支持多種插件式存儲引擎
Mysql版本
5.0--》5.1--》5.2--》5.3--》5.4--》5.5--》5.6--》5.7
Alpha 開發版
Beat 測試版
Gama 發行一個段時間的Beat版本
Generally Avalilable(GA) 穩定版
服務器

相關文章
相關標籤/搜索