日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL binlog和redo/undo的概念

發布時間:2024/4/15 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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,犧牲一定的一致性來獲取更好的性能。



超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的MySQL binlog和redo/undo的概念的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。