說說MySQL中的Redo log Undo log都在幹啥

2025-03-25 19:25:14 字數 3022 閱讀 9549

1樓:1人我飲酒不醉

undo日誌用於存放資料修改被修改前的值,假設修胡遲改 tba 表中 id=2的行資料,把name='b' 修改為name = b2' ,那麼undo日誌就會用來存放褲嫌李name='者巧b'的記錄,如果這個修改出現異常,可以使用undo日誌來實現回滾操作,保證事務的一致性。

對資料的變更操作,主要來自 insert update delete,而undo log中分為兩種型別,一種是 insert_undo(insert操作),記錄插入的唯一鍵值;一種是 update_undo(包含update及delete操作),記錄修改的唯一鍵值以及old column記錄。

2樓:愛可生雲資料庫

undo log 是為了實現事務的原子性,在mysql資料庫innodb儲存引擎中派冊,還用undo log來實現多版本併發備碧控制仿羨舉(簡稱:mvcc)。

online redo log 和undo各有什麼作用

3樓:在七里坪潛泳的菩提樹

redo記錄transaction logs,分為online和archived。以恢復為目的。 比如,機器停電,那麼在重起之後需要online redo logs去恢復系統到失敗點。

比如,磁碟壞了,需要用archived redo logs和online redo logs區恢復資料。 比如,truncate乙個表或其他的操作,想恢復到之前的狀態,同樣也需要。

redo是為了重新實現你的操作,而undo相反,是為了撤銷你做的操作,比如你得乙個transaction執行失敗了或你自己後悔了,則需要用rollback命令回退到操作之前。回滾是在邏輯層面實現而不是物理層面,因為在乙個多使用者系統中,資料結構,blocks等都在時時變化,比如我們insert乙個資料,表的空間不夠,擴充套件了乙個新的extent,我們的資料儲存在這新的extent裡,其它使用者隨後也在這extent裡插入了資料,而此時我想rollback,那麼顯然物理上講這extent撤銷是不可能的,因為這麼做會影響其他使用者的操作。所以,rollback是邏輯上回滾,比如對insert來說,那麼rollback就是delete了。

閃回恢復區是乙個預設放置所有和備份恢復操作相關檔案的地方。oracle dba可以使用automatic disk-based backup and recovery,讓資料庫來管理備份儲存的區域。

mysql中innodb資料如何恢復?重做了系統,只有data資料夾還在

4樓:網友

停止mysql服務。

修改,在檔案最後增加上面一行指令 innodb_force_recovery=4

修改檔案中datadir以及innodb_data_home_dir的指向--指向之前的資料檔案目錄。

儲存。重新啟動mysql。

檢查資料庫及表,是否恢復正常。

如正常,去掉中的innodb_force_recovery = 4重新啟動mysql。ok。

5樓:渠振鍾離傲冬

首先,innodb_data_file_path是乙個全域性變數。你使用session肯定是要報錯的。將session換成global就可以了。

因為在會話變數中沒有這個引數,所以會報錯。

其次針對你後面說的問題。所有全域性變數是包含在所有會話當中,而會話變數是優於全域性變數的。就是說。

如果你在會話當中改變乙個會話引數。而全域性變數就會暫時在當前會話失效。對於其他會話。

該全域性變數依然有效。如果當前會話斷開或結束,那這個會話變數的壽命也就壽終正寢了。再次鏈結。

就還是以全域性變數為準。不知道這麼解釋你明白。

6樓:愛可生雲資料庫

- 恢復策略。

前面說到未提交的事務和回滾了的事務也會記錄redo log,因此在進行恢復時,這些事務要進行特殊的的處理。有2中不同的恢復策略:

a. 進行恢復時,只重做已經提交了的事務。

b. 進行恢復時,重做所有事務包括未提交的事務和回滾了的事務。然後通過undo log回滾那些未提交的事務。

innodb儲存引擎的恢復機制。

mysql資料庫innodb儲存引擎使用了b策略, innodb儲存引擎中的恢復機制有幾個特點:

a. 在重做redo log時,並不關心事務性。 恢復時,沒有begin,也沒有commit,rollback的行為。

也不關心每個日誌是哪個事務的。儘管事務id等事務相關的內容會記入redo log,這些內容只是被當作要操作的資料的一部分。

b. 使用b策略就必須要將undo log持久化,而且必須要在寫redo log之前將對應的undo log寫入磁碟。undo和redo log的這種關聯,使得持久化變得複雜起來。

為了降低複雜度,innodb將undo log看作資料,因此記錄undo log的操作也會記錄到redo log中。這樣undo log就可以象資料一樣快取起來,而不用在redo log之前寫入磁碟了。

包含undo log操作的redo log,看起來是這樣的:

記錄1: >

記錄2:記錄3: >

記錄4:記錄5: >

記錄6:c. 到這裡,還有乙個問題沒有弄清楚。既然redo沒有事務性,那豈不是會重新執行被回滾了的事務?

確實是這樣。同時innodb也會將事務回滾時的操作也記錄到redo log中。回滾操作本質上也是對資料進行修改,因此回滾時對資料的操作也會記錄到redo log中。

乙個回滾了的事務的redo log,看起來是這樣的:

記錄1: >

記錄2:記錄3: >

記錄4:記錄5: >

記錄6:記錄7:

記錄8:記錄9:

乙個被回滾了的事務在恢復時的操作就是先redo再undo,因此不會破壞資料的一致性。

innodb儲存引擎中相關的函式。

redo: recv_recovery_from_checkpoint_start()

undo: recv_recovery_rollback_active()

undo log的redo log: trx_undof_page_add_undo_rec_log()

mysql儲存過程的問題,mysql中的儲存過程是什麼意思啊

為什麼要執行 select id,name from x?這是結果語句,不是過程語句.mysql中的儲存過程是什麼意思啊 直白的講就是把sql語句進行封裝,然後留個介面,使用的時候直接呼叫介面。可以把對資料的各種處理寫在儲存過程裡 程式只需呼叫 或者 傳參就可以了 方便後期維護 執行速度也比程式裡要...

mysql 中怎麼查詢關鍵字,mysql 中怎麼查詢一個關鍵字

select from user where 欄位1 like 關鍵字 or 欄位2 like 關鍵字 or 欄位n like 關鍵字 欄位1到欄位n用 or條件,只能這樣 假設你要查詢user表裡面name欄位下得帶有 傑 字的使用者sql語句 select from user where nam...

mysql中查訊咋查第一條記錄MYSQL中查訊咋查第一條記錄

檢視第一條 select group concat id order by create time desc from user group by user code select top 1 from book 不對,因為mysql裡沒有top這種寫法,它用limit。select from bo...