MySQL binlog和redo/undo的概念
binlog:binlog是二進制日志文件,用于記錄mysql的數據更新或者潛在更新(比如DELETE語句執行刪除而實際并沒有符合條件的數據),在mysql主從復制中就是依靠的binlog。在mysql中開啟binlog需要設置my.cnf中的log_bin參數,另外也可以通過binlog_do_db
指定要記錄binlog的數據庫和binlog_ignore_db指定不記錄binlog的數據庫。對運行中的mysql要啟用binlog可以通過命令SET SQL_LOG_BIN=1來設置。設置完成,我們就可以來測試binlog了。
需要注意下innodb引擎中的redo/undo log與mysql binlog是完全不同的日志,它們主要有以下幾個區別:
1、層次不同,redo/undo 是indodb層維護的,而binlog是mysql server層維護的,跟采用何種引擎沒有關系,記錄的是所有引擎的更新操作的日志記錄
2、記錄內容不同,redo/undo記錄的是每個頁的修改情況,屬于物理加邏輯的方式(redo log到物理頁,頁內采用邏輯日志,undo log采用的是邏輯日志),目的是保證數據的一致性,binlog記錄的是事物操作內容,比如一條語句DELETE FROM TABLE WHERE i > 1之類的,不管采用的是什么引擎,當然格式是二進制的,要解析日志內容可以用這個命令mysqlbinlog -vv BINLOG。
3、記錄時機不同,redo/undo在事物執行過程中會不斷的寫入,binlog是在事物最終commit前寫入,binlog什么時候刷新到磁盤跟參數sync_binlog相關。
顯然,我們執行SELECT等不涉及數據更新的語句是不會記binlog的,而涉及到數據更新則會記錄。要注意的是,對支持事務的引擎如innodb而言,必須要提交了事務才會記錄binlog。
binlog刷新到磁盤的時機跟sync_binlog參數息息相關,如果此參數配置為0,表示MySQL不控制binlog的刷新,則直接由文件系統決定什么時候刷新到磁盤,如果設置為不為0,則表示隔多少個事物刷新到磁盤,設置為1是最安全,在系統故障時最多丟失一個事務的更新,但是會對性能有所影響。一般情況下會設置為100或者0,犧牲一定的一致性來獲取更好的性能。
總結
以上是生活随笔為你收集整理的MySQL binlog和redo/undo的概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: activemq的使用经验
- 下一篇: Redis及其Sentinel配置项详细