mysql 日志_MySQL日志系統

MySQL日志系統

MySQL有兩個重要的日志系統,分別是 redo log (重做日志)bin log (歸檔日志)

這兩種日志有以下三點不同。

  • redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 層實現的,所有引擎都可以使用。
  • redo log 是物理日志,記錄的是“在某個數據頁上做了什么修改”;binlog 是邏輯日志,記錄的是這個語句的原始邏輯,比如“給 ID=2 這一行的 c 字段加 1 ”。
  • redo log 是循環寫的,空間固定會用完;binlog 是可以追加寫的。“追加寫” 是指 binlog 文件寫到一定大小后會切換到下一個,并不會覆蓋以前的日志。

1. redo log

為了理解這個日志,可以舉一個酒店掌柜的例子。說是有一個酒店掌柜,他有一個粉板專門記錄客人賒賬的情況,如果賒賬的人不多,那么他可以把顧客名和賬目寫在板上。但如果賒賬的人多了,粉板總會有記不下的時候,這個時候掌柜一定還有一個專門記錄賒賬的賬本。

如果有人要賒賬或者還賬的話,掌柜一般有兩種做法:

  • 一種做法是直接把賬本翻出來,把這次賒的賬加上去或者扣除掉;
  • 另一種做法是先在粉板上記下這次的賬,等打烊以后再把賬本翻出來核算。

在生意紅火柜臺很忙時,掌柜一定會選擇后者,因為前者操作實在是太麻煩了。

同樣,在 MySQL 里也有這個問題,如果每一次的更新操作都需要寫進磁盤,然后磁盤也要找到對應的那條記錄,然后再更新,整個過程 IO 成本、查找成本都很高。為了解決這個問題,MySQL 的設計者就用了類似酒店掌柜粉板的思路來提升更新效率。redo log 就相當于是粉板,而 bin log 相當于是賬本。

而粉板和賬本配合的整個過程,其實就是 MySQL 里經常說到的 WAL 技術,WAL 的全稱是 Write-Ahead Logging,它的關鍵點就是先寫日志,再寫磁盤,也就是先寫粉板,等不忙的時候再寫賬本。

InnoDB 的 redo log 是固定大小的,比如可以配置為一組 4 個文件,每個文件的大小是 1GB,那么這塊“粉板”總共就可以記錄 4GB 的操作。從頭開始寫,寫到末尾就又回到開頭循環寫,如下面這個圖所示。

a54333cbef968d8caa5b8d4aedb9d889.png

write pos 是當前記錄的位置,一邊寫一邊后移,寫到第 3 號文件末尾后就回到 0 號文件開頭。checkpoint 是當前要擦除的位置,也是往后推移并且循環的,擦除記錄前要把記錄更新到數據文件。

write pos 和 checkpoint 之間的是“粉板”上還空著的部分,可以用來記錄新的操作。如果 write pos 追上 checkpoint,表示“粉板”滿了,這時候不能再執行新的更新,得停下來先擦掉一些記錄,把 checkpoint 推進一下。

有了 redo log,InnoDB 就可以保證即使數據庫發生異常重啟,之前提交的記錄都不會丟失,這個能力稱為 crash-safe。要理解 crash-safe 這個概念,可以想想我們前面賒賬記錄的例子。只要賒賬記錄記在了粉板上或寫在了賬本上,之后即使掌柜忘記了,比如突然停業幾天,恢復生意后依然可以通過賬本和粉板上的數據明確賒賬賬目。

2. bin log

假設我們要執行一下一條簡單的語句,我們來看執行器和 InnoDB 引擎在執行這個簡單的 update 語句時的內部流程。

update 
  1. 執行器先找引擎取 ID=2 這一行。ID 是主鍵,引擎直接用樹搜索找到這一行。如果 ID=2 這一行所在的數據頁本來就在內存中,就直接返回給執行器;否則,需要先從磁盤讀入內存,然后再返回。
  2. 執行器拿到引擎給的行數據,把這個值加上 1,比如原來是 N,現在就是 N+1,得到新的一行數據,再調用引擎接口寫入這行新數據。
  3. 引擎將這行新數據更新到內存中,同時將這個更新操作記錄到 redo log 里面,此時 redo log 處于 prepare 狀態。然后告知執行器執行完成了,隨時可以提交事務。
  4. 執行器生成這個操作的 bin log,并把 bin log 寫入磁盤。
  5. 執行器調用引擎的提交事務接口,引擎把剛剛寫入的 redo log 改成提交(commit)狀態,更新完成。

這里需要關注的點是最后三步將寫 redo log 和寫 bin log 打包成一個事務,要保證redo log 和 bin log 的日志是一樣的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455810.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455810.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455810.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

盛大游戲杯第十五屆上海大學程序設計聯賽暨上海金馬五校賽

編程1小時,提交4小時 做這種比賽一定要選一個好OJ啊 黑白圖像直方圖 發布時間: 2017年7月8日 21:00 最后更新: 2017年7月8日 22:38 時間限制: 1000ms 內存限制: 128M 描述 在一個矩形的灰度圖像上,每個像素點或者是黑色的或者是白色的。黑色像素點…

對幾個重要問題的闡述

由于DPB中間的參考幀的MV都是以4X4塊為單位&#xff0c;現在以8X8塊作Direct mode模式&#xff0c;所以必須對子塊的MV作合并&#xff0c; JM采用的東西是如下圖的方式: x o | o x o o | o o - - - - - o o | o o x o | o x 每8X8塊取外角上的4X4塊的MV. 算法如下: <<<…

【MySQL】基于Docker的Mysql主從復制搭建

基于Docker的Mysql主從復制搭建 為什么基于Docker搭建&#xff1f; 資源有限 虛擬機搭建對機器配置有要求&#xff0c;并且安裝mysql步驟繁瑣 一臺機器上可以運行多個Docker容器 Docker容器之間相互獨立&#xff0c;有獨立ip&#xff0c;互不沖突 Docker使用步驟簡便&#xf…

Web開發介紹

Web開發介紹 一,認識一個網站 最早的軟件都是運行在大型機上的&#xff0c;軟件使用者通過“啞終端”登陸到大型機上去運行軟件。 后來隨著PC機的興起&#xff0c;軟件開始主要運行在桌面上&#xff0c;而數據庫這樣的軟件運行在服務器端&#xff0c;這種Client/Server模式簡…

python云端系統開發入門_Python云端系統開發入門

第01課 初識Django 課時1Django框架介紹 00 : 14 : 33 開始學習 課時2工程搭建1 00 : 28 : 50 開始學習 課時3工程搭建2 00 : 13 : 22 開始學習 第02課 請求和響應的處理 課時1獲取請求url的參數 00 : 07 : 57 開始學習 課時2獲取請求url的查詢字符串 00 : 12 : 01 開始學習 課…

IBM 安全部門 CTO:AI 必須被重新定義為“增強智能”

編者按&#xff1a;隨著人工智能的發展&#xff0c;人們對它逐漸有誤會、恐懼之心。如果能夠利用好人工智能&#xff0c;特別是在網絡安全領域&#xff0c;它將成為人類對抗網絡犯罪強有力的武器。IBM 安全部門的 CTO Sandy Bird 認為現在的人工智能應該被重新定義為“增強智能…

【Nginx】通過反向代理配置本地圖床功能

安裝nginx sudo apt-get install nginx配置nginx.conf sudo vim /etc/nginx/nginx.conf worker_processes auto; pid /run/nginx.pid;events {worker_connections 768;# multi_accept on; }http {sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash…

構建之法第二章

單元測試&#xff1a;一個開發人員要面對測試一個單元時只給出單元的代碼而沒有規格說明這樣吃力不討好的任務.你怎樣做才會有更多的收獲,而不僅僅是發現編譯器的Bug?第一步是理解這個單元原本要做什么, --- 不是它實際上做了什么. 比較有效的方法是倒推出一個概要的規格說明.…

幀內預測模式提取

if (input->rdopt) { int mb_available_up; int mb_available_left; int mb_available_up_left; min_rdcost max_rdcost; // precompute all new chroma intra prediction modes // 對色度進行幀內預測 IntraChromaPredict…

Django簡介以及安裝

Django簡介 1. 認識Django Django是一個高級的Python Web框架&#xff0c;它鼓勵快速開發和清潔&#xff0c;務實的設計。由經驗豐富的開發人員構建&#xff0c;它負責Web開發的許多麻煩&#xff0c;因此您可以專注于編寫應用程序&#xff0c;而無需重新創建輪子。它是免費的…

python基礎筆試面試題_python基礎面試常見題

Python是目前市面上&#xff0c;我個人認為是最簡潔、最優雅、最有前途、最全能的編程語言&#xff0c;沒有之一。 2、通過什么途徑學習的Python&#xff1f; 通過自學&#xff0c;包括網上查看一些視頻&#xff0c;購買一些相關專業的書籍。 3、Python和Java、PHP、C、C#、C等…

django-rest-swagger顯示接口備注內容

Swagger是一個API開發者的工具框架&#xff0c;用於生成、描述、調用和可視化RESTful風格的Web服務。總體目標是使客戶端和文件系統服務器以同樣的速度來更新&#xff0c;方法&#xff0c;參數和模型緊密集成到服務器端的代碼中&#xff0c;允許API始終保持同步。 在使用 djan…

安全和連接是IoT聯網設備2大挑戰

IoT正在推動500億個聯網設備在未來10年內從工業、零售、智能照明、智慧城市、汽車、農業、可穿戴設備、智能建筑、醫療市場涌現出來&#xff0c;ARM處理器部門市場營銷總監Ian Smythe表示&#xff1a;“到2020年&#xff0c;消費電子和健康、智慧城市和物流、汽車和運輸領域的I…

windows下部署免費ssl證書(letsencrypt)

隨著網絡的發展&#xff0c;網絡安全也越來越重要&#xff0c;對于網站來說&#xff0c;從Http升級到https也是我們要做的首要事情。要實現https&#xff0c;首先我們需要申請一張SSL證書&#xff0c;這篇文章我主要介紹下邊這幾個方面&#xff1a; 1. SSL簡單介紹 2. 免費Lete…

Django之URLconf路由

URLconf路由 一個干凈優雅的URL方案是高質量Web應用程序中的一個重要細節。 Django可以讓你設計URL&#xff0c;無論你想要什么&#xff0c;沒有框架限制。 要為應用程序設計URL&#xff0c;您可以非正式地創建一個名為URLconf&#xff08;URL配置&#xff09;的Python模塊。…

python中什么是關鍵字參數_如何使用python語言中函數的關鍵字參數的用法

一般情況下&#xff0c;在調用函數時&#xff0c;使用的是位置參數&#xff0c;即是按照參數的位置來傳值&#xff1b;關鍵字參數是按照定義函數傳入的參數名稱來傳值的。那么&#xff0c;關鍵字參數怎么使用&#xff1f;工具/原料 python pycharm 截圖工具 WPS 方法/步驟 1 打…

HTML塊級元素

在HTML5出現之前&#xff0c;人們一般把元素分為塊級、內聯和內聯塊元素。本文將詳細介紹HTML塊級元素h標題(Heading)元素有六個不同的級別&#xff0c;<h1>是最高級的&#xff0c;而<h6>則是最低的。一個標題元素能簡要描述該節的主題從<h1>到<h6>&am…

【SSL】HTTPS配置全過程

服務器配置https協議 HTTPS&#xff0c;是以安全為目標的HTTP通道&#xff0c;簡單講是HTTP的安全版。即HTTP下加入SSL層&#xff0c;HTTPS的安全基礎是SSL&#xff0c;因此加密的詳細內容就需要SSL。 配置HTTPS就需要證書&#xff0c;關于證書方面不做過多解釋&#xff0c;只…

iOS開發UI篇—懶載入

iOS開發UI篇—懶載入 1.懶載入基本 懶載入——也稱為延遲載入&#xff0c;即在須要的時候才載入&#xff08;效率低&#xff0c;占用內存小&#xff09;。所謂懶載入&#xff0c;寫的是其get方法. 注意&#xff1a;假設是懶載入的話則一定要注意先推斷是否已經有了。假設沒有那…

python之虛擬環境

Virtualenv(虛擬環境) VirtualEnv用于在一臺機器上創建多個獨立的Python虛擬運行環境&#xff0c;多個Python環境相互獨立&#xff0c;互不影響.這樣有很多優點,寶寶們要記住哦,比如: 在沒有權限的情況下安裝新套件 不同應用可以使用不同的套件版本 套件升級不影響其他應用 …