Bin log 二進制日誌 備份 增量備份 DDL DML DCL
Erro Log 錯誤日誌 排錯
Relay Log 中繼日誌 複製 接收relication master
Slow query Log 慢查詢日誌
Redo Log 重做日誌
什麼時候產生:
事務開始之後就產生redo log,redo log的落盤並不是隨着事務的提交才寫入的,而是在事務的執行過程中,便開始寫入redo log文件中。
什麼時候釋放:
當對應事務的髒頁寫入到磁盤之後,redo log的使命也就完成了,重做日誌佔用的空間就可以重用(被覆蓋)。
事務開始之後就產生redo log,redo log的落盤並不是隨着事務的提交才寫入的,而是在事務的執行過程中,便開始寫入redo log文件中。
即使某個事務還沒有提交,Innodb存儲引擎仍然每秒會將重做日誌緩存刷新到重做日誌文件。
Undo Log 回滾日誌
保存了事務發生之前的數據的一個版本,可以用於回滾,同時可以提供多版本併發控制下的讀(MVCC)
什麼時候產生:
事務開始之前,將當前是的版本生成undo log,undo 也會產生 redo 來保證undo log的可靠性
什麼時候釋放:
當事務提交之後,undo log並不能立馬被刪除,
而是放入待清理的鏈表,由purge線程判斷是否由其他事務在使用undo段中表的上一個事務之前的版本信息,決定是否可以清理undo log的日誌空間。
兩階段提交
MySQL通過兩階段提交過程來完成事務的一致性的,也即redo log和binlog的一致性的,理論上是先寫redo log,再寫binlog,兩個日誌都提交成功(刷入磁盤),事務纔算真正的完成。
表鎖
偏向MyISAM存儲引擎,開銷小,加鎖快;無死鎖;鎖定粒度大,併發度低;
show open tables;
手動鎖表:
lock table jeuc read(讀共享鎖:可讀自己,不可修改自己,不可讀別的表) ;
讀鎖:讀共享鎖:當前Session1可讀自己,Session1不可修改自己,Session1不可讀別的表;Session2 可讀取,Session2修改操作在當前Session1解鎖期間,處於阻塞狀態。
lock table jeuc write(獨佔鎖);
寫鎖:當前Session1可讀自己,Session1可修改自己,Session1不可讀別的表;Session2 ,Session2 在當前Session1解鎖期間,讀寫都處於阻塞狀態。
手動釋放表:
unlock tables;
總之:對MyISAM讀鎖會阻塞寫,不會阻塞讀。寫鎖會把讀寫都阻塞。
show STATUS LIKE 'table%';
行鎖
偏向innodb存儲
索引失效行鎖變表鎖
間隙鎖
範圍查詢,InnoDB會給符合條件的已有數據的索引項加鎖,對於在範圍條件內但並不存在的記錄,叫做間隙鎖。即使鍵值不存在。