mysql innodb log_教你如何理解mysql中的innoDB log
前言:之前一直弄不清楚mysql里面bin log和innodb log文件的區(qū)別,在腦子里面一直有個疑問binlog日志文件已經(jīng)可以用來進(jìn)行數(shù)據(jù)庫的日志備份恢復(fù)了,怎么又多了一個redo log文件了。相信也有很多人有這個疑惑,現(xiàn)在把整個過程文檔整理出來,希望對大家有所幫忙。
如果對Oracle很了解,那么在整個學(xué)習(xí)innoDB log的時候,可以把聯(lián)機(jī)重做日志的那套理論套在學(xué)習(xí)innoDB log上面,幾乎是一樣的;
一、innodb log的基礎(chǔ)知識
innodb log顧名思義:即innodb存儲引擎產(chǎn)生的日志,也可以稱為重做日志文件,默認(rèn)在innodb_data_home_dir下面有兩個文件ib_logfile0和ib_logfile1。MySQL官方手冊中將這兩個文件叫文InnoDB存儲引擎的日志文件;
innodb log的作用:當(dāng)MySQL的實例和介質(zhì)失敗的時候,Innodb存儲引擎就會使用innodb log文件進(jìn)行恢復(fù),保證數(shù)據(jù)庫的完整性;
innodb log的寫原理:(請容許我再放下InnoDB的原理圖,并且建議把這張圖看到吐)
看紅色框框的那部分
每個InnDB存儲引擎至少有1個重做日志文件組(group),每個文件組下至少有兩個重做日志文件,默認(rèn)的為ib_logfile0、ib_logfile1;
日志組中每個重做日志的大小一致,并循環(huán)使用;
InnoDB存儲引擎先寫重做日志文件,當(dāng)文件滿了的時候,會自動切換到日志文件2,當(dāng)重做日志文件2也寫滿時,會再切換到重做日志文件1;
為了保證安全和性能,請設(shè)置每個重做日志文件設(shè)置鏡像,并分配到不同的磁盤上面;
(發(fā)現(xiàn)以上特性跟ORACLE的連接重做日志文件簡直是一樣的)
二、innodb log的相關(guān)參數(shù)
運行腳本:show variables like 'innodb%log%'; 查看重做日志的相關(guān)參數(shù)
mysql> show variables like 'innodb%log%';
常用設(shè)置的參數(shù)有:
innodb_mirrored_log_groups? 鏡像組的數(shù)量,默認(rèn)為1,沒有鏡像;
innodb_log_group_home_dir? 日志組所在的路徑,默認(rèn)為data的home目錄;
innodb_log_files_in_group? ? 日志組的數(shù)量,默認(rèn)為2;
innodb_log_file_size? ? ? ? ? ? ? 日志組的大小,默認(rèn)為5M;
innodb_log_buffer_size? ? ? ? 日志緩沖池的大小,圖上為30M;
三、參數(shù)的相關(guān)調(diào)優(yōu)
3.1 重做日志文件的大小設(shè)置跟ORACLE一樣,面臨的問題是相似的。
當(dāng)innodb log設(shè)置過大的時候,可能會導(dǎo)致系統(tǒng)崩潰后恢復(fù)需要很長的時間;
當(dāng)innodb log設(shè)置過小的時候,當(dāng)一個事務(wù)產(chǎn)生大量的日志的時候,需要多次切換重做日志文件,會產(chǎn)生類似如下的報警;
130702 12:53:13? InnoDB: ERROR: the age of the last checkpoint is 2863217109,
InnoDB: which exceeds the log group capacity 566222311.
InnoDB: If you are using big BLOB or TEXT rows, you must set the
InnoDB: combined size of log files at least 10 times bigger than the
四、重做日志與二進(jìn)制日志的區(qū)別
4.1? 記錄的范圍不同:二進(jìn)制日志會記錄MySQL的所有存儲引擎的日志記錄(包括InnoDB、MyISAM等),
而InnoDB存儲引擎的重做日志只會記錄其本身的事務(wù)日志。
4.2 記錄的內(nèi)容不同:二進(jìn)制日志文件記錄的格式可以為STATEMENT或者ROW也可以是MIXED,其記錄的都是關(guān)于一個事務(wù)的具體操作內(nèi)容。
InnoDB存儲引擎的重做日志文件記錄的關(guān)于每個頁的更改的物理情況。
4.3 寫入的時間也不同:二進(jìn)制日志文件是在事務(wù)提交前進(jìn)行記錄的,而在事務(wù)進(jìn)行的過程中,不斷有重做日志條目被寫入到重做日志文件中。
總結(jié):理論指導(dǎo)實踐,理論的知識雖然比較枯燥,學(xué)習(xí)跟建房子一樣,看著很漂亮的高樓大廈,地下往往要有一個堅實的基礎(chǔ),基礎(chǔ)打好了,高樓也能建得穩(wěn)了。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的mysql innodb log_教你如何理解mysql中的innoDB log的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 5.5 免安装_mysql
- 下一篇: mysql qps如何查看_一款查看my