国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

你是不是 Redo log 和 Binlog 傻傻分不清楚?

數據庫 MySQL
在 MySQL 中,特別是存儲引擎使用的是 InnoDB 時,那肯定繞不過去兩個概念:redo log (重做日志) 和 binlog (二進制日志)。

[[351526]]

本文轉載自微信公眾號「Java極客技術」,作者鴨血粉絲 。轉載本文請聯系 Java極客技術公眾號。

阿粉這么貼心,肯定給你講清楚了~

在 MySQL 中,特別是存儲引擎使用的是 InnoDB 時,那肯定繞不過去兩個概念:redo log (重做日志) 和 binlog (二進制日志)

簡單點兒說:redo log 是 InnoDB 存儲引擎層方面的日志,所以如果你使用的存儲引擎不是 InnoDB 的話,那就根本談不上 redo log

binlog 是 MySQL Server 層記錄的日志,所以不管是用的什么存儲引擎,只要是 MySQL 都是會有 binlog 的存在,在做 MySQL 主從復制的時候,利用的就是 binlog

那么,你有疑問嘛?為什么要有 redo log 和 binlog ,只用一個 log 不可以嘛?咱們詳細來看看它們都分別做了啥

redo log

為什么要有 redo log ?

我們可以這樣想,如果沒有 redo log 的話, MySQL 是如何進行工作的 查詢還好說,畢竟只是查詢一下記錄而已,并沒有對數據進行更改

那如果是增加和更新操作呢?現在一條 update 語句過來,后面是不是一定會有限定條件,就比如現在要更新一條記錄,把 A 的銀行卡余額更新到 1k ,那這條語句是不是應該來個限定條件,類似 where userName = 'A',也就是說,一般 update 操作都伴隨著查詢的操作,得先找到這個人,然后再進行更新操作對吧

如果數據量比較小還好,很快就能找到并且更新完畢

但是如果數據量比較大,里面有一億條數據,怎么辦?而且更新操作肯定是要寫到磁盤上去的,那這中間的 IO 成本呢?如果我有好幾十條 update 語句先后更新呢?這樣想的話,你就能想到,就這些操作,成本就高的不行,那能不能降低一下這些成本呢?

這就是 redo log 的作用

就是當有一條記錄更新的時候, InnoDB 引擎就會先把記錄寫到 redo log 里面去,同時更新內存,這樣就算是更新這條數據成功了

但是此時,它并沒有更新到磁盤上去對吧?別擔心, InnoDB 會在恰當的時候,把這條及記錄更新到磁盤上去

這樣的思想或者技術,有個專有名詞: WAL 技術,也就是 WriteAheadLogging ,核心就是先寫日志,再寫磁盤

同樣,這里面有個問題

redo log 不能一直寫吧?如果更新操作一直寫入到 redo log 中的話,不限制大小的話,可能服務器上的存儲空間都被 redo log 給占滿了

所以 InnoDB 的 redo log 是固定大小的,比如我們配置了一組 4 個文件,每個文件大小是 1GB ,那么它的操作可能就會這樣:

能夠看到,主要就是 write pos 和 checkpoint , write pos 比較好理解,它就是當前記錄的位置,有需要記錄的操作就從當前位置向后移,等把 ib_logfile_3 寫完之后,就回到 ib_logfile_0 文件開頭繼續寫

checkpoint 是當前要擦除的位置,就是 InnoDB 引擎不是會在恰當的時候,將這些操作進行持久化,更新到磁盤上去,那持久化之后的數據是不是就可以擦除了

write pos 和 checkpoint 之間的部分就是可以用來記錄操作的部分,那么如果 write pos 和 checkpoint 相遇了怎么辦?相遇了是不是說明這個時候分配的 redo log 大小用完了,那這時候就不能再進行更新操作了,必須停下來處理一下,將 checkpoint 往前推推才行

就是因為有了 redo log ,所以 InnoDB 才可以保證即使數據庫發生了異常重啟,也沒關系,之前提交的記錄都還在,只需要根據 redo log 里面的記錄進行相應恢復就可以了

所以如果你和 DBA 比較熟的話,可以問問,咱們的 MySQL 是不是可以恢復到半個月內任意一秒的狀態,如果對方回答是,別懷疑,他真的不是在吹牛逼

binlog

binlog 是 MySQL Server 層的記錄日志,這塊舉個例子來說吧

在說之前,我們要明白 redo log 和 binlog 的區別:

  • redo log 是 InnoDB 引擎特有的, binlog 是 MySQL 的 Server 層實現的,所有的引擎都是可以的
  • redo log 是物理日志,記錄的是"在 XXX 頁上做了 XXX 修改"; binlog 是邏輯日志,比如" 給 id = 2 這一行的 c 字段加 1"
  • redo log 是有固定大小的,所以它的空間會用完,如果用完的話,一定要進行一些寫入磁盤的操作才可以繼續; binlog 是可以追加寫入的,也就是 binlog 沒有空間的概念,一直寫就行了

理解了它們之間區別之后,我們拿一個更新操作來舉例

我現在要給 id = 2 這一行的 c 字段加 1,到 MySQL 層面,它是如何去做的呢?

首先,會先找到這條 id = 2 的數據,然后找到 c 字段進行加 1 操作,這個時候,引擎會將這行數據更新到內存中,同時把這個更新操作記錄到 redo log 里面,這個時候 redo log 處于 prepare 狀態,隨后執行器生成這個操作的 binlog ,并且把 binlog 寫入到磁盤完成之后,執行器調用引擎的提交事務接口,引擎把剛剛寫入的 redo log 從 prepare 狀態改成 commit 狀態,這樣更新操作才算完成

兩階段提交

在上面的描述中,你能發現 redo log 竟然是先 prepare 狀態,等 binlog 寫完之后,才是 commit 狀態,這種方式就叫"兩階段提交"

為什么會有這種方式呢?

redo log 和 binlog 都可以用于表示事務的提交狀態,而兩階段提交就是讓這兩個狀態保持邏輯上的一致

可以假設一下,如果不采用這種方式,而是就先寫 redo log ,再寫 binlog ,會怎樣?如果在寫 binlog 時,發生了異常,更新操作已經到 redo log 中了,但是此時 binlog 并沒有進行更新,是不是出現了數據不一致?

先寫 binlog 再寫 redo log 也是一樣的道理

所以,在寫時,先讓 redo log 處于 prepare 狀態,等 binlog 寫完之后,再讓 redo log 處于 commit 狀態,這樣就保持了邏輯上的一致

以上,非常感謝您的閱讀哇~

 

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2022-05-15 21:52:04

typeTypeScriptinterface

2021-03-10 08:56:37

Zookeeper

2021-07-27 07:31:16

JavaArrayList數組

2024-02-29 09:08:56

Encoding算法加密

2020-03-03 17:35:09

Full GCMinor

2025-08-18 03:25:00

2020-10-30 08:20:04

SD卡TF卡存儲

2018-12-17 12:30:05

Kubernetes存儲存儲卷

2018-05-22 16:24:20

HashMapJavaJDK

2023-02-27 15:46:19

數據元元數據

2022-02-25 09:14:33

類變量共享實例變量

2023-09-03 21:18:07

Python編程語言

2021-02-14 22:33:23

Java字符字段

2023-04-11 15:57:49

JavaScriptCSSHTML

2021-02-08 23:47:51

文件存儲塊存儲對象存儲

2025-05-12 08:40:00

前端監控DOM

2025-08-14 08:21:17

PODAODTO

2016-11-04 12:51:46

Unix網絡IO 模型

2021-11-09 06:01:35

前端JITAOT

2024-11-04 00:00:03

viewportDOMSPA
點贊
收藏

51CTO技術棧公眾號

欧美 日韩 国产 一区| 国产精品视频看| 国内精品美女av在线播放| 欧洲亚洲精品视频| 国产电影精品久久禁18| 国产精品一区二区三区四区| 国产拍欧美日韩视频二区| 欧美精品人人做人人爱视频| 中文精品一区二区| 少妇精69xxtheporn| 黄色国产网站在线播放| 亚洲国产一二三| 久久午夜夜伦鲁鲁一区二区| 日本免费新一区视频| 成人亚洲激情网| 欧美男男freegayvideosroom| 亚洲欧美激情精品一区二区| 国产资源在线播放| 亚洲精品视频一区| 国产精品无码一本二本三本色| 久久精品免费观看| 久久av免费观看| 激情国产一区| 97视频中文字幕| 日韩久久视频| 奇米4444一区二区三区 | 亚洲高清久久网| 福利在线午夜| 亚洲v日本v欧美v久久精品| 日本女优爱爱视频| 丁香网亚洲国际| 亚洲五码在线观看视频| 欧美96一区二区免费视频| 国产日韩一区二区| 99视频精品视频高清免费| 国产成人一区二区三区| 欧美精品中文字幕亚洲专区| 欧美激情一级二级| 日本成人手机在线| 美女av一区二区| 免费污视频在线一区| 精品一区二区电影| 欧美xxxxxx| yellow中文字幕久久| 日日夜夜精品| 九九视频直播综合网| 试看120秒一区二区三区| 九九视频这里只有精品 | 久久久久久久久久久一区| 伊人影院久久| 九九九九九精品| 日本一不卡视频| 日本免费一区二区三区| 久久国产精品第一页| 成人免费在线视频播放| 国产成人av电影在线观看| 欧美成人高潮一二区在线看| 国产亚洲精品福利| 亚欧在线免费观看| 亚洲电影一级黄| 国产高清在线| 亚洲福利视频久久| 九九热这里有精品| 91产国在线观看动作片喷水| 精品国产欧美日韩| 99精彩视频| 激情综合一区二区三区| 久久亚洲a v| 亚洲欧美日韩成人高清在线一区| 黄动漫网站在线观看| 欧美日韩精品一区二区天天拍小说 | 国产日韩精品一区观看| 免费高清成人在线| 欧美日韩在线中文| 洋洋av久久久久久久一区| 不卡在线视频| 亚洲无线码在线一区观看| 成人在线视频你懂的| 91在线视频九色| 国产在线精品一区二区夜色 | 国产伦精品一区二区三毛| 男人的天堂亚洲一区| 男人操女人免费软件| 一级女性全黄久久生活片免费| 日本在线免费| 久久精品这里热有精品| 日韩aaaa| 激情五月五月婷婷| 亚洲精品一二三四区| 日皮视频在线观看| 久久久久久久电影一区| 亚洲午夜电影| 男女曰b免费视频| 欧美性色黄大片| 国产区一区二| 裸体丰满少妇做受久久99精品| 91在线看国产| 在线观看免费网站黄| 精品国内产的精品视频在线观看| 日韩成人精品一区| 成人性生活视频免费看| 欧美影院午夜播放| 视频一区国产| 伊人色综合影院| 亚洲成人黄色影院| 国产一区高清| 欧美lavv| 亚洲成人免费影院| 久久青草视频| 国产精品一区在线观看| 国产清纯白嫩初高生在线观看91 | 国产欧美日本一区视频| 成人免费观看视频大全| 欧美在线一区二区三区四| 极品美女销魂一区二区三区免费 | 头脑特工队2免费完整版在线观看| 精品久久久久久久久久久久| 精品久久国产一区| 亚洲第一会所| 国产精品自产拍在线观看中文| 日韩精品在线一区二区| 男人天堂久久久| 影音先锋中文字幕一区| 草草视频在线一区二区| 性一爱一乱一交一视频| 99re资源| heyzo视频在线播放| 日韩一二三区视频| 日韩成人综合| 91大神影片| 久久婷婷国产麻豆91天堂 | 欧美变态tickle挠乳网站| 香蕉一区二区| 日韩在线xxx| 亚洲无限av看| 久久成人羞羞网站| 亚洲wwwww| 国产三区精品| 在线精品视频免费播放| 色爱综合网欧美| 国产免费福利| 97精品国产97久久久久久春色| zzijzzij亚洲日本少妇熟睡| 345成人影院| 99热这里只有精品7| 精品粉嫩超白一线天av| 日韩精品乱码av一区二区| 国产在线更新| 日本免费一区二区三区| 综合国产精品久久久| 色婷婷久久99综合精品jk白丝| 免费一区二区三区视频导航| 成人免费观看www在线| 久久精品国产一区| 不卡一二三区首页| **国产精品| 18禁男女爽爽爽午夜网站免费| 亚洲午夜未满十八勿入免费观看全集| 久久午夜影视| 岛国在线视频网站| 日本成人在线不卡| 北条麻妃一区二区三区中文字幕| 粉嫩13p一区二区三区| 精品视频在线一区二区在线| 日韩伦理在线免费观看| 不卡av电影在线观看| 国产精品色噜噜| sdde在线播放一区二区| 欧美成人免费| 裸模一区二区三区免费| 欧美一二区视频| 国内不卡的二区三区中文字幕 | 日韩av男人的天堂| 一区二区三区日韩欧美精品| 久久精品久久久| 自拍视频在线播放| 日韩妆和欧美的一区二区| 亚洲精品视频播放| 26uuu亚洲综合色| 亚洲人成网亚洲欧洲无码| 在线观看黄色| 蜜桃传媒视频麻豆一区| 精品一区二区三区电影| 国产欧美一区二区精品婷婷| 欧美日韩一区二区综合 | 欧美整片在线观看| 亚洲欧美日韩综合aⅴ视频| 国产精品7m凸凹视频分类| 麻豆影院在线| 日韩人妻无码精品久久久不卡| 国内精品久久影院| 欧美性极品少妇| 韩国成人精品a∨在线观看| 91精品国产一区二区在线观看 | 国产精品久久7| 正在播放日韩欧美一页 | av在线日韩国产精品| 欧美福利精品| 日韩在线视频免费观看高清中文 | 国产精品免费丝袜|