類似於日誌之類的數據表,只會用到最新一段時間的數據,隨着時間累積,會影響到該表的性能與容量瓶頸,但是又不捨得刪除這裏歷史數據,這時候,可以以備份的形式將這些歷史數據歸檔起來。也即是備份到另一張表或是導出存到磁盤等。
歸檔方式:
- 採用sql語句
首先創建一張新表與舊錶一模一樣,如:
接着需要歸檔的數據導入新表並刪除舊錶中的數據,如:create table log_bak like log;
具體怎麼執行上述命令,可以通過存儲過程的方式,也可以寫個crontab任務,也可以在項目中寫定時任務,等等,不一而足。insert into log_bak select * from log where created_at < NOW() - INTERVAL 90 DAY; delete from log where created_at < NOW() - INTERVAL 90 DAY;
需要注意的是,在插入數據到備份表的時候,可能會因爲數據量過大而導致執行失敗,這時候就需要控制單次執行的數據量,如果是報“The total number of locks exceeds the lock table size.”,則需要將innodb_buffer_pool_size值進行調優,等等。 - 使用第三方工具,如:pt-archiver