MySQL定時清理表數據
針對一些每天都會產生大量數據的表,比如說報警、日志表等,數據量太大占用了較多的空間,可以選擇定時清理這些表,只保留一段時間內的數據
對某個表只保留一個月內的數據
查看是否開啟MySQL定時任務
# 顯示為ON則已開啟 SHOW VARIABLES LIKE 'event_scheduler';
顯示為ON表示已經開啟
若未開啟,可以手動開啟
在my.cnf(windows下是my.ini)添加配置 event_scheduler=ON
添加完畢后,重啟MySQL服務即可
也可以通過語句方式開啟,但是這種方式只在當前啟動的實例有效,重啟MySQL服務后就會失效
set global event_scheduler=1;
創建存儲過程
CREATE PROCEDURE `del_data_count`(IN date_inter INT) BEGIN DELETE FROM alarminfo WHERE (TO_DAYS(NOW()) - TO_DAYS(alarmTime))>=date_inter; # 當前系統時間減去表的時間字段名 END
創建事件
# 創建事件 CREATE EVENT `del_tbl_expired_data` # 表示創建時間定時周期,以及開始時間,該處表示從明天1點從開始,每天執行一次該任務 ON SCHEDULE EVERY '1' DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR) # 表示創建后并不開始生效 ON COMPLETION PRESERVE DISABLE # 執行存儲過程,刪除30天之前的數據 DO CALL del_data_count (30);
相關語句:
# 查看已有定時事件任務 SHOW EVENTS; # 開啟事件 alter event event_name on completion preserve enable; # 關閉事件 alter event event_name on completion preserve disable;
MySQL定時自動刪除數據表
描述
自MySQL5.1.6起,增加了一個非常有特色的功能–事件調度器(EventScheduler),可以用做定時執行某些特定任務(例如:刪除記錄、對數據進行匯總等等),來取代原先只能由操作系統的計劃任務來執行的工作。
更值得一提的是MySQL的事件調度器可以精確到每秒鐘執行一個任務,而操作系統的計劃任務(如:Linux下的CRON或Windows下的任務計劃)只能精確到每分鐘執行一次。
對于一些對數據實時性要求比較高的應用(例如:股票、賠率、比分等)就非常適合。
開啟事件調度器
1、確認是否開啟
SHOW VARIABLES LIKE 'event_scheduler';
2、開啟命令
SET GLOBAL event_scheduler = ON;
創建事件<創建后默認開啟>
CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule ?[ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] ?DO sql_statement;?
例如:
1.每分鐘(60S)清空一次記錄表
use database_name; create event table_truncate on schedule every 60 second do truncate table operator_record_log;
2.每30天(2592000S)清空30天前的所有記錄,僅保留近30天數據
use database_name; create event table_truncate on schedule every 2592000 second do delete from operator_record_log where create_date < DATE_SUB(CURDATE(),INTERVAL 30 DAY);
3.指定時間將表清空
use database_name; create event table_truncate on schedule at timestamp '2022-01-01 00:00:00' do truncate table operator_record_log;
4.每天定時清空
use database_name; create event table_truncate on schedule every 1 day starts '2022-01-01 00:00:00' do truncate table operator_record_log;
關閉事件
alter event event_name disable;
開啟事件
alter event event_name enable;
刪除事件
drop event if exists event_name;
查看事件
show events;
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持。
原文地址:https://www.cnblogs.com/lonecloud/p/11044182.html