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

歡迎訪問 生活随笔!

生活随笔

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

数据库

MySQL update正在执行中突然断电,数据是否更改成功?

發布時間:2023/12/29 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL update正在执行中突然断电,数据是否更改成功? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ?今天有個朋友突然問到我這個問題,當我們的update語句執行過程中,服務器突然斷電了會發生什么?其實這個問題主要在于對mysql update生命周期的理解,以及了解mysql 的redolog和binlog這兩個日志的作用。

????????上一篇文章講到mysql update的執行過程,MySQL update生命周期?。執行過程主要分為server層和存儲引擎層兩步操作,server層主要是創建連接和SQL的解析優化,存儲引擎層主要是事務的執行和提交的操作。這里就不細講了可以查看之前的文章或者其他論壇文章。

redolog

? ? ? ?redolog 也叫預寫式日志WAL(write-ahead logging),它是innoDB存儲引擎層特有的一種日志。redolog 空間大小固定,可循環寫。

? ? ? ?redolog的結構包含四部分信息:

? ? ? ?type redo日志的類型(mlog_1byte、mlog_2byte、mlog_4byte、mlog_8byte、mlog_write_string);

???????space ID表空間ID;

???????page number 頁號;

???????offset 數據修改的位置;

???????data 該條日志得具體數據內容,redolog是物理日志所以data里記錄的是物理操作(例如:某個事務ID將哪張表空間的第幾頁中的哪個數據做了什么樣的修改)。

? ? ?? redolog的寫入過程

? ? ? ??redolog最終也是寫入在磁盤中的,它寫入在磁盤中是順序IO因此它的性能是非常高的。

? ? ? ??寫入log buffer

? ? ? ? redo log在寫入時也不是直接寫入磁盤中的,它是被寫入到 一個大小為512字節的 redo log block頁中。它先寫入到?redo 日志緩沖區 (log buffer)?的內存區域中,該區域在MySQL啟動時就會向操作系統申請,這片區域被劃分為若干個連續的 block,可以通過啟動選項?innodb_log_buffer_size?指定 log buffer 的大小。

? ? ? ? redo日志刷盤

? ? ? ? 寫入到log buffer內存后,需要將數據刷到磁盤中刷盤的策略主要有:1.當log buffer空間不足;2.當前的事務完整提交;3. 固定每秒刷盤一次;4.正常關閉服務器;

binlog

? ? ? ? binlog也叫做歸檔日志,它是mysql? server層的日志。不區分存儲引擎,所有存儲引擎都可以使用。binlog 日志是邏輯日志,記錄的是sql語句的原始邏輯,binlog日志是以追加的方式寫入在文件中并不會覆蓋之前的日志。

? ? ? ? binlog日志的使用場景

? ? ? ? 1. mysql主從時做數據復制同步使用,binlog日志是二進制的文件所以它的復制性能會高。

? ? ? ? 2. 做容災的數據恢復。

? ? ? ? binlog的寫入過程

? ? ? ? ?寫入binglog cache

? ? ? ? mysql服務器系統給每個線程分配一個binlog cache的內存塊,當事務在執行的過程中,會把操作的日志寫到binlog cache中,同一個事務的binlog日志不會被分開寫入都是一次性寫入到binlog cache中。如果是支持事務的存儲引擎,必須要事務提交后才會寫入日志。

?????????binlog日志刷盤

? ? ? ? ?binlog日志刷盤取決于sync_binlog參數的設置,表示每sync_binlog次事務提交則將日志刷新到磁盤。如果設置為0,則完全由文件系統去控制它緩存的刷新。因此未保證數據的完整性最好將sync_binlog設置為1,每次事務提交都刷新,但會對性能有所影響。

如果在update執行過程中突然斷電會發生什么?

? ? ? ? 1. 如果在斷電時 redolog 還沒有寫入,那么重啟后將沒有任何的數據變化。

? ? ? ? 2. 如果redolog 已經寫入了但狀態還在prepare時,binlog日志還沒有寫入,那么重啟后會將事務進行回滾,數據也沒有任何變化。

? ? ? ? 3.?如果redolog 已經寫入了,binlog也寫入了,但redolog日志還沒commit, 那么重啟后會檢查binlog是否完整,如果完整則提交事務,數據發生變化,如果不完整則回滾事務,數據也不發生變化。

總結

以上是生活随笔為你收集整理的MySQL update正在执行中突然断电,数据是否更改成功?的全部內容,希望文章能夠幫你解決所遇到的問題。

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