MySQL數(shù)據(jù)庫(kù)擁有一個(gè)稱為修改日志(redo log)的特性,它是一種持久化的數(shù)據(jù)結(jié)構(gòu),將所有數(shù)據(jù)修改操作記錄下來(lái),確保在意外意外宕機(jī)或者崩潰情況下,數(shù)據(jù)庫(kù)能夠恢復(fù)到最近一次數(shù)據(jù)修改之后的狀態(tài)。修改日志的工作方式是將所有數(shù)據(jù)修改操作轉(zhuǎn)化為一系列的日志記錄,這些記錄被存儲(chǔ)在磁盤上。
MySQL的修改日志分為兩種類型:InnoDB重做日志和回滾日志(undo log)。InnoDB的重做日志被存儲(chǔ)在一組文件中,稱為重做日志文件組。當(dāng)數(shù)據(jù)發(fā)生變化時(shí),MySQL將其寫入重做日志文件。重做日志文件的大小是可配置的,這取決于服務(wù)器的內(nèi)存和磁盤大小。在InnoDB中,每個(gè)修改操作都會(huì)被記錄在重做日志文件中,當(dāng)數(shù)據(jù)被寫入到磁盤的時(shí)候,重做日志才會(huì)被清空。
回滾日志和重做日志不同,它們被用于撤消未提交事務(wù)的數(shù)據(jù)修改,以保證在回滾操作后,數(shù)據(jù)庫(kù)的狀態(tài)能夠重置為事務(wù)開(kāi)始前的狀態(tài)。回滾日志是一個(gè)事務(wù)專用的數(shù)據(jù)結(jié)構(gòu),在InnoDB存儲(chǔ)引擎中,回滾日志是存儲(chǔ)在表空間內(nèi)的。
MySQL的修改日志不僅僅可以用于恢復(fù),在災(zāi)難恢復(fù)過(guò)程中被稱為“重啟恢復(fù)”,還能用于削減回放延遲以及實(shí)現(xiàn)數(shù)據(jù)復(fù)制和高可用性等功能。
示例代碼: ALTER TABLE table_name MODIFY column_name column_type;