宜春seo網(wǎng)站推廣免費(fèi)友情鏈接交換平臺(tái)
MySQL的內(nèi)部日志
binlog記載的是update/delete/insert這樣的SQL語(yǔ)句,而redo log記載的是物理修改的內(nèi)容(xxxx頁(yè)修改了xxx)。
binlog無(wú)論MySQL用什么引擎,都會(huì)有,而redo log是MySQL的InnoDB引擎所產(chǎn)生的。
redo log事務(wù)開(kāi)始的時(shí)候,就開(kāi)始記錄每次的變更信息,而binlog是在事務(wù)提交的時(shí)候才記錄。
redo log的作用是為持久化而生的。redo log的存在為了:當(dāng)我們修改的時(shí)候,寫完內(nèi)存了,但數(shù)據(jù)還沒(méi)真正寫到磁盤的時(shí)候。此時(shí)我們的數(shù)據(jù)庫(kù)掛了,我們可以根據(jù)redo log來(lái)對(duì)數(shù)據(jù)進(jìn)行恢復(fù)。因?yàn)閞edo log是順序IO,所以寫入的速度很快,并且redo log記載的是物理變化(xxxx頁(yè)做了xxx修改),文件的體積很小,恢復(fù)速度很快。
redo log不會(huì)存儲(chǔ)著歷史所有數(shù)據(jù)的變更,文件的內(nèi)容會(huì)被覆蓋的。
binlog的作用是復(fù)制和恢復(fù)。
主從服務(wù)器需要保持?jǐn)?shù)據(jù)的一致性,通過(guò)binlog來(lái)同步數(shù)據(jù)。
如果整個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)都被刪除了,binlog存儲(chǔ)著所有的數(shù)據(jù)變更情況,那么可以通過(guò)binlog來(lái)對(duì)數(shù)據(jù)進(jìn)行恢復(fù)。
先寫redo log,再寫binlog。
如果寫redo log失敗了,那我們就認(rèn)為這次事務(wù)有問(wèn)題,回滾,不再寫binlog。
如果寫redo log成功了,寫binlog,寫binlog寫一半了,但失敗了怎么辦?我們還是會(huì)對(duì)這次的事務(wù)回滾,將無(wú)效的binlog給刪除(因?yàn)閎inlog會(huì)影響從庫(kù)的數(shù)據(jù),所以需要做刪除操作)