MySQL定時(shí)任務(wù),清理表數(shù)據(jù)方式
MySQL定時(shí)清理表數(shù)據(jù)
針對(duì)一些每天都會(huì)產(chǎn)生大量數(shù)據(jù)的表,比如說(shuō)報(bào)警、日志表等,數(shù)據(jù)量太大占用了較多的空間,可以選擇定時(shí)清理這些表,只保留一段時(shí)間內(nèi)的數(shù)據(jù)
對(duì)某個(gè)表只保留一個(gè)月內(nèi)的數(shù)據(jù)
查看是否開(kāi)啟MySQL定時(shí)任務(wù)
# 顯示為ON則已開(kāi)啟 SHOW VARIABLES LIKE 'event_scheduler';
顯示為ON表示已經(jīng)開(kāi)啟
若未開(kāi)啟,可以手動(dòng)開(kāi)啟
在my.cnf(windows下是my.ini)添加配置 event_scheduler=ON
添加完畢后,重啟MySQL服務(wù)即可
也可以通過(guò)語(yǔ)句方式開(kāi)啟,但是這種方式只在當(dāng)前啟動(dòng)的實(shí)例有效,重啟MySQL服務(wù)后就會(huì)失效
set global event_scheduler=1;
創(chuàng)建存儲(chǔ)過(guò)程
CREATE PROCEDURE `del_data_count`(IN date_inter INT) BEGIN DELETE FROM alarminfo WHERE (TO_DAYS(NOW()) - TO_DAYS(alarmTime))>=date_inter; # 當(dāng)前系統(tǒng)時(shí)間減去表的時(shí)間字段名 END
創(chuàng)建事件
# 創(chuàng)建事件 CREATE EVENT `del_tbl_expired_data` # 表示創(chuàng)建時(shí)間定時(shí)周期,以及開(kāi)始時(shí)間,該處表示從明天1點(diǎn)從開(kāi)始,每天執(zhí)行一次該任務(wù) ON SCHEDULE EVERY '1' DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR) # 表示創(chuàng)建后并不開(kāi)始生效 ON COMPLETION PRESERVE DISABLE # 執(zhí)行存儲(chǔ)過(guò)程,刪除30天之前的數(shù)據(jù) DO CALL del_data_count (30);
相關(guān)語(yǔ)句:
# 查看已有定時(shí)事件任務(wù) SHOW EVENTS; # 開(kāi)啟事件 alter event event_name on completion preserve enable; # 關(guān)閉事件 alter event event_name on completion preserve disable;
MySQL定時(shí)自動(dòng)刪除數(shù)據(jù)表
描述
自MySQL5.1.6起,增加了一個(gè)非常有特色的功能–事件調(diào)度器(EventScheduler),可以用做定時(shí)執(zhí)行某些特定任務(wù)(例如:刪除記錄、對(duì)數(shù)據(jù)進(jìn)行匯總等等),來(lái)取代原先只能由操作系統(tǒng)的計(jì)劃任務(wù)來(lái)執(zhí)行的工作。
更值得一提的是MySQL的事件調(diào)度器可以精確到每秒鐘執(zhí)行一個(gè)任務(wù),而操作系統(tǒng)的計(jì)劃任務(wù)(如:Linux下的CRON或Windows下的任務(wù)計(jì)劃)只能精確到每分鐘執(zhí)行一次。
對(duì)于一些對(duì)數(shù)據(jù)實(shí)時(shí)性要求比較高的應(yīng)用(例如:股票、賠率、比分等)就非常適合。
開(kāi)啟事件調(diào)度器
1、確認(rèn)是否開(kāi)啟
SHOW VARIABLES LIKE 'event_scheduler';
2、開(kāi)啟命令
SET GLOBAL event_scheduler = ON;
創(chuàng)建事件<創(chuàng)建后默認(rèn)開(kāi)啟>
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天數(shù)據(jù)
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.指定時(shí)間將表清空
use database_name; create event table_truncate on schedule at timestamp '2022-01-01 00:00:00' do truncate table operator_record_log;
4.每天定時(shí)清空
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;
關(guān)閉事件
alter event event_name disable;
開(kāi)啟事件
alter event event_name enable;
刪除事件
drop event if exists event_name;
查看事件
show events;
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL大內(nèi)存配置方案 如my-medium.ini、my-huge.ini等
這篇文章主要介紹了MySQL大內(nèi)存配置方案 如my-medium.ini、my-huge.ini等,經(jīng)測(cè)試確實(shí)不錯(cuò),訪問(wèn)mysql速度快了很多2014-08-08mysql數(shù)據(jù)庫(kù)優(yōu)化總結(jié)(心得)
本篇文章是對(duì)mysql數(shù)據(jù)庫(kù)優(yōu)化進(jìn)行了詳細(xì)的總結(jié)與介紹,需要的朋友參考下2013-06-06mysql優(yōu)化limit查詢語(yǔ)句的5個(gè)方法
這篇文章主要介紹了mysql優(yōu)化limit查詢語(yǔ)句的5個(gè)方法,它們分別是子查詢優(yōu)化法、倒排表優(yōu)化法、反向查找優(yōu)化法、limit限制優(yōu)化法和只查索引法,需要的朋友可以參考下2014-07-07MySQL優(yōu)化之對(duì)RAND()的優(yōu)化方法
這篇文章主要介紹了MySQL優(yōu)化之對(duì)RAND()的優(yōu)化方法,本文詳細(xì)分析了Mysql中對(duì)RAND()的幾種優(yōu)化方法,并最終得出一個(gè)結(jié)論,需要的朋友可以參考下2014-07-07mysql實(shí)現(xiàn)查詢每門課程成績(jī)最好的前兩名學(xué)生id和姓名
這篇文章主要介紹了mysql實(shí)現(xiàn)查詢每門課程成績(jī)最好的前兩名學(xué)生id和姓名方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11