1. 程式人生 > >MySQL數據庫從入門到實戰(一)

MySQL數據庫從入門到實戰(一)

DBA體系 mysql 非關系型數據庫 SQL優化

第一部分:了解DBA體系
一、初級DBA應該掌握哪些技能?(運維人員必會知識)
1.MySQL安裝部署
2.基本參數配置
3.備份策略設計與實現
二、中級DBA應該掌握哪些技能?
1.故障處理能力(備份或者其他手段)
2.MySQL監控能力
3.基本優化能力(索引、執行計劃、慢日誌分析);有一定的SQL分析能力
4.主從復制的基本管理、應用、故障處理
三、高級DBA應該掌握哪些技能?
1.MySQL性能調優:對整體架構、“業務”、“用戶行為”深入了解,要有很紮實的SQL能力
2.高性能、高可用架構:對整體架構、“業務”、“用戶行為”深入了解
四、對數據的理解
對現實對象、事件的抽象顯示或存儲方式
數據庫適合存儲什麽數據?
》重要數據
》非二進制的,文本形式的更適合於存放到數據庫中
》有關系,有復雜邏輯的數據
》數據管理復雜的
第二部分:DBMS數據庫管理系統
一、作用:
1、更有條理的存儲和查詢數據
2、提供更高級的數據管理方式(備份、恢復、優化、安全等等)
二、分類:
1.關系型
二維表
典型產品 Oracle傳統企業,MySQL是互聯網企業
數據存取是通過SQL
最大特點,數據安全性方面強(ACID)
2.非關系型(NoSQL)
非關系型數據庫(Not only SQL)
不是否定關系型數據庫,做關系型數據庫的的補充
3.數據庫版本
oracle數據庫版本介紹(目前仍位居第一)
(8.1.7,9.2.0.8 ,10.2.0.4 10.2.0.5,11.2.0.3 11.2.0.4,12.2)
MySQL數據庫版本介紹(開源免費)
(5.6.36 ,5.6.38 ,5.6.34 ,5.7.18,5.7.20)
面試問題總結: 詢問你公司用的mysql版本,為什麽用?
行業規範,選擇主流大版本,發布六個月以上GA版本,我們公司選擇這款數據庫是基於公司業務特點決定的,開發階段也是用的5.6的版本。(根據自己業務公司情況來說)
三、補充:
》mariadb(mysql的一個主要分支)存儲引擎TokuDB特點:
1.insert操作比innodb性能高3-4倍
2.數據壓縮比8倍以上
3.查詢性能比innodb好
》企業應用場景:
zabbix(爬蟲類)應用業務類型:(原因如下)
1.insert插入多
2.數據量大,需要存儲大量數據
》perconaDB(了解,有精力可研究)研究它的工具:
xtrabackup (用於優化SQL)

第三部分:MySQL體系結構
一、mysqld構成
(1).連接層
說明:
》提供通信協議
TCP/IP ---所有系統通用
socket ---linux特有
》提供鏈接線程;隨著客戶端請求派生出專門的響應線程;作用是和客戶端進行交互
查看當前數據庫的連接線程數:show full processlist
過程:》接收客戶端發來的SQL》得到查詢結果之後返回給客戶端結果》向下層(SQL層)傳輸接收到的SQL》後端處理完成的結果負責接收,轉給客戶端。
(2)SQL層
》SQL線程接收上層線程發送過來的SQL語句
》檢查語法是否正確,有誤拋出錯誤提示,還有授權檢測
》檢查語義,語句的類型(DDL、DCL、DML、DQL)
》會將語句交給不同解析進行解析
》解析器開始解析,生成執行計劃
》優化器,判斷所有生成的執行計劃,找到成本最低的執行計劃,轉給執行器
》執行器,執行這個執行計劃,得出去哪個盤找哪個文件的哪頁哪行數據
》有專門的線程將結果發送給下層(存儲引擎層)繼續處理
》下層傳過來的數據結構化成表的形式,轉給上層連接層專門線程
》將上層執行過的SQL語句進行hash,生成一個hash結果(SQL_ID)和獲取數據結果緩存下來(QUERY_CACHE)。
補充:
》企業裏現在主流解決方案關閉QUERY_CACHE,用redis或memcache代替
(3)存儲引擎層
》接收上層傳過來的數據位置,找到相應的頁上的行
》找到行之後,發送給SQL層
二、頁,區,段定義
(1)頁(默認16k):mysql的最小物理存儲分配單元。
用來存放數據庫中表中的行
(2)區:mysql認為對於一行數據來講,如果需要多個頁情況,我們盡量給他連續的才更高效,所有有了區的概念。
(3)多個區構成,我們認為,連續的區組成段

MySQL數據庫從入門到實戰(一)