文章內容學習:極客時間-林曉彬老師-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都持久化到磁盤
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/180988.html
標籤:其他
上一篇:mysql資料庫的最基本的操作
