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