MySQL binlog和redo undo的概念

2021-08-19 16:40:00 字數 1108 閱讀 8901

binlog:b

inlog是二進位制日誌檔案,用於記錄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,犧牲一定的一致性來獲取更好的效能。

使用Cacti監控MongoDB和Redis

cacti 是一套基於php,mysql,snmp及rrdtool開發的網路流量監測圖形分析工具。被廣泛的用於對伺服器的運維監控中,cacti提供了一種外掛程式式的管理,只要按要求寫好特定的模板,那麼你就可以對任何服務進行流量監控 本文就是要為大家介紹兩個模板,分別是mongodb 和redis 的...

mysql binlog備份初探

備份mysql的binlog檔案,可以配合分庫或全庫的備份檔案實現基於時間點的資料恢復.在工作過程中,遇到兩種情況 1.不執行flush logs命令 缺點 對於不進行頻繁寫入和更新的業務,備份後,浪費磁碟空間.優點 對於一天只生成乙個binlog檔案的業務,恢復資料比較容易,只需要解壓乙個binl...

mysqlbinlog使用詳解

mysqlbinlog用於處理二進位制日誌檔案的實用工具詳解 mysqlbinlog 從二進位制日誌讀取語句的工具。在二進位制日誌檔案中包含的執行過的語句的日誌可用來幫助從崩潰中恢復 在my.cnf這個檔案中加一行 windows為my.ini vi etc my.cnf mysqld log bi...