mysql定时任务,每天定时执行
最近在公司需要做一個mysql每天定時執行存儲過程,完成后記錄一下,以便日后查閱。
這里我們實現一個定時任務,每天凌晨1點執行一個存儲過程,向用戶表插入一條記錄。
首先查看mysql數據庫是否開啟了事件計劃 ,如果沒有需要開啟事件
可以看到,事件計劃未開啟
1)在命令行執行語句修改,這種方式雖然能生效,但是會在數據庫重啟后恢復原來的狀態
set global event_scheduler=1;2)修改my.ini配置文件,使配置在數據庫重啟后依然生效,修改后記得要重啟數據庫
[mysqld] event_scheduler=ON創建用戶表user
CREATE TABLE `user` (`user_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',`user_name` varchar(20) DEFAULT NULL COMMENT '用戶名',`age` int(11) DEFAULT NULL COMMENT '年齡',`create_time` datetime DEFAULT NULL COMMENT '創建時間',PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;創建存儲過程user_procedure
-- 先刪除存儲過程 DROP PROCEDURE IF EXISTS user_procedure; -- 創建存儲過程 delimiter $$ create procedure user_procedure() begin insert into user(user_name , age , create_time) values ('張萌' , 26 , now()); end$$創建完成后可以手動調用一次存儲過程,看是否能正常執行
call user_procedure();此時刷新user表,可以看到表中新增了一條記錄,說明存儲過程符合預期。
如果想要再次查看存儲過程的創建語句,可以通過下面命令
創建定時任務event,每天的凌晨一點執行
-- 先刪除事件 DROP EVENT IF EXISTS user_event ; CREATE EVENT `user_event` -- 創建名字為user_event的事件 ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR) -- 每隔一天執行一次,開始執行時間為明天凌晨1點整 ON COMPLETION NOT PRESERVE ENABLE DO call user_procedure() -- 指定要執行的存儲過程 ;上述腳本中的執行計劃說明
1) SCHEDULE EVERY 1比較好理解,就是每天執行一次
2)開始執行時間我們可以先看一下DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR) 的值是多少。
首先查詢一下當前時間
開始執行時間為
可以看到,事件的開始執行時間為當前時間的第二天凌晨1點。這樣定時任務就配置好了
查看所有事件可以使用命令
select * from information_schema.`EVENTS`;開啟關閉事件使用
alter event user_event on completion preserve enable; -- 開啟定時任務 alter event user_event on completion preserve disable; -- 關閉定時任務最后
為了方便大家測試,提供了 每隔一分鐘執行一次,開始執行時間為當前時間的下一分鐘的腳本
-- 先刪除事件 DROP EVENT IF EXISTS user_event ; CREATE EVENT `user_event` -- 創建名字為user_event的事件 ON SCHEDULE EVERY 1 MINUTE STARTS DATE_ADD(now(), INTERVAL 1 MINUTE) -- 每隔一分鐘執行一次,開始執行時間為當前時間的下一分鐘 ON COMPLETION NOT PRESERVE ENABLE DO call user_procedure() -- 指定要執行的存儲過程 ;這樣我們就可以看到用戶表中每分鐘都會新增一條記錄。
借助可視化客戶端
除了純手寫腳本外,我們也可以借助可視化客戶端來輔助我們開發,比如navicat
如下圖所示,選中一個數據庫后,點擊事件->新建事件,在定義選項卡中填寫我們要執行的sql語句
然后再計劃選項卡中設置執行時間
上面的配置表示:在當前時間的一分鐘后執行,且該事件只會執行一次,執行完成后事件會自動刪除。我們還可以在SQL預覽選項卡中預覽navicat幫我們生成好的sql語句,而不需要再純手寫
配置完成后點擊保存按鈕,輸入事件名稱即可。
如果想要多次執行,可以在EVERY區域進行配置
上面的配置表示:每隔一分鐘執行一次,開始執行時間為當前時間的后一分鐘。
總結
以上是生活随笔為你收集整理的mysql定时任务,每天定时执行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几款常用的OCR技术软件 新2
- 下一篇: 用jQuery获取复选框选中的当前行的某