[英]Mysql PHP Cron for updating user stats
我正在嘗試構建一個將每24小時運行一次的php cron作業,並在mysql數據庫中更新了用戶靜態信息。 我遇到的問題是我不確定如何確保同一用戶值不會循環更新,這意味着其他用戶均不會更新。 我試圖用while循環來做,但是進展不順利。
所以基本上它應該像這樣
1. cron啟動->
2.更新mysql數據庫中每個用戶的統計信息->
3. cron結束
MySQL解決方案:
您需要MySQL event
按時間運行。
我建議您根據情況編寫update
語句,並將相同的過程鏈接到要在每天開始時運行的事件調度程序。
您可以按照以下步驟進行操作:
范例 :
delimiter //
drop event if exists event_scheduling_sample;
create event if not exists event_scheduling_sample
-- on schedule every 86400 second starts 00:00:00
-- at timestamp( adddate( current_date, 1 ),'00:00:00' )
-- on schedule every 1 day
-- starts current_timestamp
-- ends current_timestamp + interval '5' day
-- on schedule every 1 day
-- starts current_timestamp
-- ends timestamp( current_date,'23:59:59' )
on schedule every 1 day
starts timestamp( current_date + 1, '00:00:00' )
comment 'event scheduling sample'
do
call db_name.procedure_name_that_updates_the_user_records();
;
//
delimiter ;
參考 : MySQL:CREATE EVENT語法
事件計划程序的默認狀態為DISABLED。
您需要通過以下任何語句來啟用它。
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;
當事件調度程序為ON時,事件調度程序線程作為守護進程在SHOW PROCESSLIST
的輸出中列出,其狀態表示如下:
mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 1
User: root
Host: localhost
db: NULL
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 2. row ***************************
Id: 2
User: event_scheduler
Host: localhost
db: NULL
Command: Daemon
Time: 3
State: Waiting for next activation
Info: NULL
2 rows in set (0.00 sec)
將事件計划程序設置為“打開”后,您將看到它正在工作。
參考 : MySQL事件調度程序配置
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.