MySQL innoDB重做記錄檔
前言:之前一直弄不清楚mysql裡面bin log和innodb log檔案的區別,在腦子裡面一直有個疑問binlog記錄檔已經可以用來進行資料庫的記錄備份恢複了,怎麼又多了一個redo log檔案了。相信也有很多人有這個疑惑,現在把整個過程文檔整理出來,希望對大家有所幫忙。
如果對Oracle很瞭解,那麼在整個學習innoDB log的時候,可以把聯機重做日誌的那套理論套在學習innoDB log上面,幾乎是一樣的;
一、innodb log的基礎知識
- innodb log顧名思義:即innodb儲存引擎產生的日誌,也可以稱為重做記錄檔,預設在innodb_data_home_dir下面有兩個檔案ib_logfile0和ib_logfile1。MySQL官方手冊中將這兩個檔案叫文InnoDB儲存引擎的記錄檔;
- innodb log的作用:當MySQL的執行個體和介質失敗的時候,Innodb儲存引擎就會使用innodb log檔案進行恢複,保證資料庫的完整性;
- innodb log的寫原理:(請容許我再放下InnoDB的原理圖,並且建議把這張圖看到吐)
看紅色框框的那部分
- 每個InnDB儲存引擎至少有1個重做記錄檔組(group),每個檔案組下至少有兩個重做記錄檔,預設的為ib_logfile0、ib_logfile1;
- 日誌組中每個重做日誌的大小一致,並迴圈使用;
- InnoDB儲存引擎先寫重做記錄檔,當檔案滿了的時候,會自動切換到記錄檔2,當重做記錄檔2也寫滿時,會再切換到重做記錄檔1;
- 為了保證安全和效能,請設定每個重做記錄檔設定鏡像,並分配到不同的磁碟上面;
(發現以上特性跟ORACLE的串連重做記錄檔簡直是一樣的)
二、innodb log的相關參數
運行指令碼:show variables like 'innodb%log%'; 查看重做日誌的相關參數
mysql> show variables like 'innodb%log%';
常用設定的參數有:
innodb_mirrored_log_groups 鏡像組的數量,預設為1,沒有鏡像;
innodb_log_group_home_dir 日誌組所在的路徑,預設為data的home目錄;
innodb_log_files_in_group 日誌組的數量,預設為2;
innodb_log_file_size 日誌組的大小,預設為5M;
innodb_log_buffer_size 日誌緩衝池的大小,圖上為30M;
三、參數的相關調優
3.1 重做記錄檔的大小設定跟ORACLE一樣,面臨的問題是相似的。
當innodb log設定過大的時候,可能會導致系統崩潰後恢複需要很長的時間;
當innodb log設定過小的時候,當一個事務產生大量的日誌的時候,需要多次切換重做記錄檔,會產生類似如下的警示;
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
四、重做日誌與二進位日誌的區別
4.1 記錄的範圍不同:二進位日誌會記錄MySQL的所有儲存引擎的日誌記錄(包括InnoDB、MyISAM等),
而InnoDB儲存引擎的重做日誌只會記錄其本身的交易記錄。
4.2 記錄的內容不同:二進位記錄檔記錄的格式可以為STATEMENT或者ROW也可以是MIXED,其記錄的都是關於一個事務的具體操作內容。
InnoDB儲存引擎的重做記錄檔記錄的關於每個頁的更改的物理情況。
4.3 寫入的時間也不同:二進位記錄檔是在事務提交前進行記錄的,而在事務進行的過程中,不斷有重做日誌條目被寫入到重做記錄檔中。
總結:理論指導實踐,理論的知識雖然比較枯燥,學習跟建房子一樣,看著很漂亮的高樓大廈,地下往往要有一個堅實的基礎,基礎打好了,高樓也能建得穩了。
MySQL InnoDB儲存引擎鎖機制實驗
InnoDB儲存引擎的啟動、關閉與恢複
MySQL InnoDB獨立資料表空間的配置
MySQL Server 層和 InnoDB 引擎層 體繫結構圖
InnoDB 死結案例解析
MySQL Innodb獨立資料表空間的配置
本文永久更新連結地址: