文章內容學習:極客時間-林曉彬老師-MySQL實戰45講 整理而得
我們知道MySQL資料庫在發生意外宕機的情況下,可以將資料恢復到歷史的某個時間點,能實現這個功能依靠的是紀錄檔,MySQL提供兩種型別的紀錄檔,也是兩個模組中的紀錄檔,分別是儲存引擎中的紀錄檔(redo log(重做紀錄檔))和Server層的紀錄檔(binlog(歸檔紀錄檔))
redo log
MySQL在執行一條更新語句的時候,需要更新記憶體中的資料,然後在更新磁碟中的資料,這裡運用到了WAL技術,全稱是Write-Ahead Logging
這裡的關鍵點就是先寫個更新紀錄檔,然後把記憶體中的資料給更新,等到系統有空閒時間了,再更新磁碟上的資料
InnoDB的redo log是物理紀錄檔,記錄了在某個資料頁做了什麼修改,並且檔案是固定大小,可以設定一組為4個紀錄檔檔案,每個檔案大小為1G,那麼總計可以儲存4G的紀錄檔。因為紀錄檔大小是固定的,所以存滿了需要從第一個紀錄檔檔案開始迴圈繼續寫。有了redo log InnoDB就可以保證資料庫發生異常宕機重新啟動後,之前提交的資料都不會丟失,這個能力稱之為crash-safe
binlog
binlog是Server的紀錄檔,記錄的是邏輯紀錄檔,比如"給ID=2的一行資料的C欄位更新為1",並且紀錄檔是追加寫入的,檔案到了指定大寫會自動切割換到下一個檔案,不會覆蓋以前的檔案,這一點不像redo log。
用於調節紀錄檔的引數
innodb_flush_log_at_trx_commit 這個引數設定為1,表示每次事務的redo log紀錄檔都直接持久化到磁碟
sync_binlog 這個引數設定為1,表示每次事務binlog都持久化到磁碟