mysql的定時任務一般用event(事件)來完成,觸發(fā)器無法完成。
成都創(chuàng)新互聯(lián)是專業(yè)的蒲城網(wǎng)站建設公司,蒲城接單;提供成都網(wǎng)站設計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行蒲城網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
一、通過mysql的命令行客戶端來完成
1、set global event_scheduler =1; //開啟event_scheduler
執(zhí)行這個語句如果出現(xiàn),可在mysql的配置文檔中設置[mysqld]段中添加 event_scheduler=ON
如果重啟mysql;這種情況下依然出錯,Error Code: 1290. The MySQL server is running with the --event-scheduler=DISABLED
or --skip-grant-tables option so it cannot execute this statement,這個錯誤是說啟動服務器時如果指定了--skip-grant-tables選項,則event_scheduler則自動被設置為DISABLED。命令行或配置文件的設置都會被覆蓋。建議重現(xiàn)安裝mysql或是修改啟動參數(shù)(在系統(tǒng)服務中指定)。
查看event_scheduler狀態(tài):show status like '%event%'; 或SELECT @@event_scheduler;
2、CREATE PROCEDURE Mypro() //創(chuàng)建存儲過程
BEGIN
update userinfo SET endtime = now() WHERE id = '155';
END;
3、創(chuàng)建event My_enevt,每隔三十秒執(zhí)行一次
create event if not exists e_test
on schedule every 30 second
on completion preserve
do call Mypro();
4、關(guān)閉事件
alter event e_test ON COMPLETION PRESERVE DISABLE;
5、開啟事件
alter event e_test ON COMPLETION PRESERVE ENABLE;
語法:
CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION
[NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statement;
schedule: AT TIMESTAMP [+ INTERVAL INTERVAL] | EVERY INTERVAL [STARTS TIMESTAMP]
[ENDS TIMESTAMP] INTERVAL: quantity {YEAR | QUARTER | MONTH | DAY | HOUR |
MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND |
HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數(shù)據(jù)檢測恢復工具。前者使用起來比較簡便。推薦使用。
1. check table 和 repair table
登陸mysql 終端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出現(xiàn)的結(jié)果說Status是OK,則不用修復,如果有Error,可以用:
repair table tabTest;
進行修復,修復之后可以在用check table命令來進行檢查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk適用于MYISAM類型的數(shù)據(jù)表,而isamchk適用于ISAM類型的數(shù)據(jù)表。這兩條命令的主要參數(shù)相同,一般新的系統(tǒng)都使用MYISAM作為缺省的數(shù)據(jù)表類型,這里以myisamchk為例子進行說明。當發(fā)現(xiàn)某個數(shù)據(jù)表出現(xiàn)問題時可以使用:
myisamchk tablename.MYI
進行檢測,如果需要修復的話,可以使用:
myisamchk -of tablename.MYI
關(guān)于myisamchk的詳細參數(shù)說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL服務器沒有訪問這個數(shù)據(jù)表,保險的情況下是最好在進行檢測時把MySQL服務器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local里面啟動MySQL服務器前:
[ -x /tmp/mysql.sock ] /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL監(jiān)聽的Sock文件位置,對于使用RPM安裝的用戶應該是/var/lib/mysql/mysql.sock,對于使用源碼安裝則是/tmp/mysql.sock可以根據(jù)自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL數(shù)據(jù)庫存放的位置。
需要注意的時,如果你打算把這條命令放在你的rc.local里面,必須確認在執(zhí)行這條指令時MySQL服務器必須沒有啟動!檢測修復所有數(shù)據(jù)庫(表)
建一個批處理,計劃任務定時運行批處理。
批處理如下:
mysql -u用戶名 -p密碼 所需執(zhí)行語句.sql 返回的結(jié)果.txt
最常用的做法是使用UNIX的cron直接執(zhí)行Java程序。
并不需要在Java做的那么復雜。
Windows服務器也有類似于cron的任務管理功能,同理
---------------------------
Tomcat不是用來管理定時任務的,如果沒有HTTP請求,Servlet是不會被執(zhí)行的。
建議lz把定期執(zhí)行的處理做成一個獨立的Java程序,用cron執(zhí)行。
如果不想寫獨立的Java程序,也可以用cron定期向Tomcat發(fā)送Http請求,但是,這樣做的話注意程序處理時間不能太長,因為HTTP通信有timeout的制約。
具體怎么用我不清楚,事件是相當于mssql的作業(yè)
下面是調(diào)用存儲過程
delimiter //
drop procedure if exists up_t1;
create procedure up_t1()
begin
select 'hello world';
end
;
create procedure up_t2()
begin
call up_t1();
select 'hello world2 ';
end;
//
1、啟動Navicat for MySQL,新建數(shù)據(jù)庫連接,打開數(shù)據(jù)庫,可能有點啰嗦。
2、可以先查看定時任務的是否開啟。通過以下命令:show variables like '%sche%';
3、如果其設置值為為 OFF 或 0 ,通過執(zhí)行下列語句,來開啟event_scheduler,set global event_scheduler =1,把設置為設為ON 或 1。
4、新建一個函數(shù) ,取名為update_qiandao ,內(nèi)容為 ?UPDATE week7_user SET isqiandao = 0
5、參照上圖,新建一個事件 ?,在定義里寫 call update_qiandao() ?--也就是之前定義的函數(shù)
在“計劃”選項卡中設置 執(zhí)行時間,這里我選擇的是每天。
6、完成結(jié)束