mysql重做日志_MySQL-重做日志 redo log -原理
【redo log buffer】【redo log file】-原理
目錄:
1.重做日志寫入過程圖
2.相關(guān)知識點匯總圖
3.redo_log_buffer 原理
4.redo_log_file 原理
1. 重做日志寫入過程:
2. 相關(guān)知識點匯總:
3.?redo log buffer 原理
重做日志緩沖(redo log buffer)是Innodb存儲引擎的內(nèi)存區(qū)域中的一部分。
【重做日志信息--(1)-->redo log buffer--(2)-->重做日志文件】
在(2)中涉及知識:
<1>.關(guān)于innodb_log_buffer_size的大小:(默認(rèn)8M)
mysql> show variables like 'innodb_log_buffer_size%';
+------------------------+---------+
| innodb_log_buffer_size | 8388608 |
+------------------------+---------+
8388608(Byte)/1024/1024=8M
重做日志緩沖不需要設(shè)置的太大,只要保證每秒產(chǎn)生的事務(wù)量在緩沖大小范圍之內(nèi)。因為每秒都會刷新緩沖到日志文件。8M足夠了。
<2>.在以下三種情況下,會將重做日志緩沖中的內(nèi)容刷新到外部磁盤的重做日志文件中。
Master Thread 每一秒將重做日志緩沖刷新到重做日志文件;
每個事務(wù)提交時會將重做日志緩沖刷新到重做日志文件;
當(dāng)重做日志緩沖池剩余空間小于1/2時,重做日志緩沖刷新到重做日志文件。
4. redo log file 原理
<1>.重做日志介紹
日志文件名:
1.innodb_log_group_home_dir參數(shù)指定的目錄下有兩個文件:ib_logfile0,ib_logfile1
2.該文件被稱為:重做日志文件(redo log file),記錄Innodb存儲引擎的事務(wù)日志。至關(guān)重要!!!
3.例如:服務(wù)器意外宕機導(dǎo)致實例失敗,Innodb存儲引擎利用重做日志恢復(fù)到宕機前的狀態(tài),以此保證數(shù)據(jù)的完整性。
日志文件組:
1.每個Innodb存儲引擎至少有1個重做日志文件組,每個組至少包含2個重做日志文件(ib_logfile0,ib_logfile1).
2.可以通過設(shè)置多個鏡像日志組(mirrored log groups),將不同組放到不同磁盤,提高重做日志的高可用性。
3.日志組中的文件大小是一致的,以循環(huán)的方式運行。文件1寫滿時,切換到文件2,文件2寫滿時,再次切換到文件1.
日志文件參數(shù):
1.innodb_log_file_size 重做日志文件的大小。
2.innodb_log_files_in_group 指定重做日志文件組中文件的數(shù)量,默認(rèn)2
3.innodb_mirrored_log_groups 指定了日志鏡像文件組的數(shù)量,默認(rèn)1
4.innodb_log_group_home_dir 指定日志文件組所在的路徑,默認(rèn)./ ,表示在數(shù)據(jù)庫的數(shù)據(jù)目錄下。
<2>.重做日志文件大小設(shè)置
太大:恢復(fù)時可能需要很長時間
太小:可能導(dǎo)致一個事務(wù)需要多次切換重做日志文件;會導(dǎo)致async checkpoint,導(dǎo)致性能抖動。
錯誤日志警告信息:
InnoDB:ERROR:the age of the last checkpoint is 9433645,InnoDB:which exceeds the log group capacity 9433498.
解析:重做日志有個capacity變量,代表最后的檢查點不能超過這個閾值,如果超過,必須將緩沖池中臟頁列表(flush list)中的部分臟數(shù)據(jù)頁寫回磁盤,這是會導(dǎo)致用戶線程的阻塞。
<3>.二進(jìn)制日志和重做日志的對比:
1.類別
二進(jìn)制日志:記錄MySQL數(shù)據(jù)庫相關(guān)的日志記錄,包括InnoDB,MyISAM等其它存儲引擎的日志。
重做日志:只記錄InnoDB存儲引擎本身的事務(wù)日志。
2.內(nèi)容
二進(jìn)制日志:記錄事務(wù)的具體操作內(nèi)容,是邏輯日志。
重做日志:記錄每個頁的更改的物理情況。
3.時間
二進(jìn)制日志:只在事務(wù)提交完成后進(jìn)行寫入,只寫磁盤一次,不論這時事務(wù)量多大。
重做日志:在事務(wù)進(jìn)行中,就不斷有重做日志條目(redo entry)寫入重做日志文件。
<4>.重做日志條目
1.條目基本格式
redo_log_type (1字節(jié))
space (壓縮后可能<4字節(jié))
page_no
redo_log_body
reod_log_type: 占用1字節(jié),表示重做日志類型。各種不同操作有不同的重做日志格式,但有基本的格式。
space:表空間的ID,采用壓縮的方式,占用空間可能小于4字節(jié)。
page_no:頁的偏移量,同樣采用壓縮方式
redo_log_body:每個重做日志的數(shù)據(jù)部分,恢復(fù)時需要調(diào)用相應(yīng)的函數(shù)解析。
<5>.寫入過程
1.重做日志信息 先寫入 重做日志緩沖 再按一定條件順序?qū)懭胫刈鋈罩疚募?#xff01;
2.redo log buffer 向 redo log file 寫,是按512個字節(jié),也就是一個扇區(qū)的大小進(jìn)行寫入。扇區(qū)是寫入的最小單位,一定能寫入成功,因此過程中不需要double write.
總結(jié)
以上是生活随笔為你收集整理的mysql重做日志_MySQL-重做日志 redo log -原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 顺丰到山东多少钱啊?
- 下一篇: mysql集群重启offline_mys