在MySQL5.6中開始支持把undo log分離到獨立的表空間,並放到單獨的文件目錄下。這給部署不同IO類型的文件位置帶來便利,對於並發寫入型負載,可以把undo文件部署到單獨的高速存儲設備上。
innodb_undo_tablespaces[=4]
用於設定創建的undo表空間的個數,在mysql_install_db時初始化后,就再也不能被改動了;默認值為0,表示不獨立設置undo的tablespace,默認記錄到ibdata中;否則,則在undo目錄下創建這么多個undo文件,例如假定設置該值為4,那么就會創建命名為undo001~undo004的undo tablespace文件,每個文件的默認大小為10M。修改該值會導致Innodb無法完成初始化,數據庫無法啟動,但是另兩個參數可以修改;
1.1 REDO日志
事務執行時需要將執行的事務日志寫入到日志文件里,對應的日志文件為REDO日志。當每條SQL進行數據庫更新操作時,首先將REDO日志寫入到日志緩沖區。當客戶端執行COMMIT命令提交時,日志緩沖區的內容將被刷新到磁盤,日志緩沖區的刷新方式或者時間間隔可以通過參數innidb_flush_log_at_trx_commit控制。
REDO日志對應於磁盤上的ib_logfileN文件,該文件默認為5MB,建議設置成512MB以便容納較大的事務。在MySQL崩潰恢復時會重新執行REDO日志中的記錄。
1.2 UNDO日志
UNDO日志與 REDO日志相反,UNDO日志主要用於事務異常時的數據回滾,具體內容就是復制事務前的數據庫內容到UNDO緩沖區,然后在合適的時間將內容刷新到磁盤。
與REDO日志不同的是,磁盤上不存在單獨的UNDO日志文件,所有的UNDO日志均存放在表空間對應的.ibd數據文件中,即使MySQL服務啟用了獨立表空間,依然如此。UNDO日志又稱為回滾段。
