MySQL定时归档
背景:在很多業務場景中,每過一段時間就需要對大表進行歸檔操作以保障系統對性能穩定,但是這種操作往往會留下很多表空間碎片,所以每隔一段時間也需要對表空間進行清理。
mysql中optimize table 是比較常用的清理磁盤命令,但是這個命令對緩存區有大小要求,如果一次歸檔過多數據,往往耗時久還非常有可能無法成功。
所以只剩下了alter table這個命令,但是這個命令也非常慢:因為原理是先復制表在重建表。那這段時間我們必須保證一直看著?
自MySQL5.1.6起,增加了一個非常有特色的功能-事件調度器(Event Scheduler),可以用做定時執行某些特定任務(例如:刪除記錄、對數據進行匯總、數據備份等等),來取代原先只能由操作系統的計劃任務來執行的工作。更值得一提的是MySQL的事件調度器可以精確到每秒鐘執行一個任務,而操作系統的計劃任務(如:Linux的cron或Windows下的任務計劃)只能精確到每分鐘執行一次。對于一些對數據實時性要求比較高的應用(例如:股票、賠率、比分等)就非常適合。
由于執行磁盤清理命令的時候往往會鎖表,所以咱還得挑一個晚上每人的時候進行:
事件調度器有時也可以稱為臨時觸發器(temporal triggers),因為事件調度器是基于特定時間周期觸發來執行某些任務,而觸發器(Triggers)是基于某個表所產生的事件觸發的,區別也就在這里。
1、在使用這個功能之前必須確保event_scheduler已開啟,可執行
SET GLOBAL event_scheduler = 1;---或我們可以在配置my.cnf文件 中加上 event_scheduler = 1或SET GLOBAL event_scheduler = ON;來開啟,也可以直接在啟動命令加上“--event_scheduler=1”,例如:mysqld ... --event_scheduler=1注:將事件計劃關閉:SET GLOBAL event_scheduler = 0; 2、要查看當前是否已開啟事件調度器,可執行如下SQL:
SHOW VARIABLES LIKE 'event_scheduler';或SELECT @@event_scheduler;或SHOW PROCESSLIST;注:(1)關閉事件任務:?ALTER?EVENT eventName?ON?COMPLETION PRESERVE DISABLE;(2)開啟事件任務:ALTER?EVENT eventName?ON?COMPLETION PRESERVE ENABLE;(3)查看事件任務:SHOW EVENTS ;
二、創建事件
CREATE EVENT [IFNOT EXISTS] event_nameONSCHEDULE schedule[ONCOMPLETION [NOT] PRESERVE][ENABLE | DISABLE][COMMENT 'comment']DO sql_statement;如:2021年03月14日12點整清空test表:
CREATE EVENT e_test1 ON SCHEDULE AT TIMESTAMP '2021-03-14 12:00:00' DO TRUNCATE TABLE aaa;更多的請查看著篇文章:https://www.cnblogs.com/javahr/p/9664203.html
?
?
?
?
?
總結
- 上一篇: 云原生系列「二」Kubernetes网络
- 下一篇: Springboot项目中配置tomct