Mysql5.7 在線收縮undo log

undo log日誌保存在共享表空間ibdata1文件中,是MVCC多版本控制的核心模塊,一直以來undo log都存儲在ibdata系統表空間中,隨着數據庫的運行時間增長,ibdata1文件會越來越大,在MySQL5.7版本之前的數據庫中,如果我們想要回收ibdata1文件所佔空間,是比較複雜的,必須先將mysqldump -A全庫導出,然後刪掉data目錄,再重新對數據庫進行初始化,最後導入全庫備份,方可實現ibdata1的回收。

直到MySQL5.7 ,才支持在線收縮,收縮後變成10M。

如何在線回收,主要是以下幾個參數,記住:初始化的時候,或docker容器創建的時候就指定,在my.cnf配置文件中加上如下:


##################### undo log在線收縮新特性######################################
#用於設定創建的undo表空間的個數,在mysql_install_db時初始化後,就再也不能被改動了;默認值爲0,
#表示不獨立設置undo的tablespace,默認記錄到ibdata中;否則,則在undo目錄下創建這麼多個undo文件,
#例如假定設置該值爲4,那麼就會創建命名爲undo001~undo004的undo tablespace文件,每個文件的默認大小爲10M。
#修改該值會導致Innodb無法完成初始化,數據庫無法啓動,但是另兩個參數可以修改
innodb_undo_tablespaces=4

#undo回滾段的數量, 至少大於等於35,默認128
innodb_undo_logs=128

#當超過這個閥值(默認是1G),會觸發truncate回收(收縮)動作,truncate後空間縮小到10M
innodb_max_undo_log_size=1G

#是否開啓在線回收(收縮)undo log日誌文件,支持動態設置
innodb_undo_log_truncate = 1

#undo 表空間一般不能直接truncate,需要在所有回滾段釋放完後,才能truncate, 
#purge system每128次釋放一次回滾段,可以通過參數
#innodb_purge_rseg_truncate_frequency  來加速釋放回滾段,默認128是最大值
innodb_purge_rseg_truncate_frequency=128


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章