mysql可分為server層和儲存引擎層兩部分
1.1 server層:
聯結器 許可權驗證 盡量使用長連線,但是長連線會消耗記憶體,可以定時清理,也可以重新初始化鏈結資源
查快取(一般不用,除非讀多寫少 8.0移除)分析器 詞法分析,語法分析,語法解析
優化器 使用哪個索引 表連線順序
執行器 執行語句,查詢是否具有讀寫許可權
1.2 儲存引擎層2.1 redo log
redo log 是innodb引擎特有的物理日誌 ,記錄「在某個資料頁做了什麼修改」,迴圈寫入固定大小記憶體,redo log的存在是為了保證即使資料庫發生異常重啟,之前提交的記錄都不會丟失,這個能力稱為crash-safe
wal,write-ahead logging,先寫日誌再寫磁碟
innodb_flush_log_at_trx_commit引數決定寫磁碟時機,設定為1: 系統預設模式,每次事務提交時mysql都會把log buffer的資料寫入log file,並且flush(刷到磁碟)中
2.2 binlog
追加寫入檔案,到達指定大小切換另乙個檔案
三個用途:
1.恢復:利用binlog日誌恢復資料庫資料
2.複製:主從同步
3.審計:通過二進位制日誌中的資訊來進行審計,判斷是否有對資料庫進行注入攻擊
三種模式:
1.statement 記錄的是修改sql語句
2.row 記錄的是每行實際資料的變更,記兩條,更新前和更新後
3.mixed statement和row模式的混合
2.3 更新語句執行流程
innodb:查詢需要更新的記錄
innodb:資料是否在記憶體中,存在直接返回,否則從磁碟讀入記憶體
server:執行器將該記錄進行更新
innodb:將記憶體資料更新
innodb:寫入redolog,處於prepare階段
server:寫binlog
innodb:提交事務,處於commit階段
2.4 兩階段提交策略
先在引擎層寫redolog,redolog處於prepare
然後在server寫binlog
事務提交,redolog commit提交寫入磁碟
崩潰恢復
Mysql學習筆記一
最近在學習mysql,以後工作會慢慢往這方面轉向,所以提前預習。現在全世界都喊著去ioe,所以咱也必須提前做個準備。衝.第一章基礎知識 1 改變表結構 增加列 alter table test add name char 6 更改列定義 alter table test change year bo...
Mysql學習筆記(一)
一 mysql學習筆記 觸發器 觸發器四要點 1.監視誰 table 2.監視事件 insert update delete 3.觸發時間 after before 4.觸發事件 insert update delete 語法 create trigger 觸發器名稱 after before 觸發...
Mysql學習筆記一
一 mysql資料型別 1 整數 浮點數 定點型別 1個位元組佔8位,漢字佔兩個位元組 16位 正數定義成unsigned 定點數 decimal m,d m表示總長度 d表示小數字 存入的時候四捨五入計算 範圍與double相同 例子 decimal 5,2 123.45 2 日期與時間 一般用d...