我正在尝试构建一个php cron作业,将每24小时运行一次,并在mysql数据库中更新用户静态信息。我遇到的问题是,我不确定如何确保相同的用户值不会在循环中更新,这意味着其他值都不会更新。我试着用while循环来做,但是效果不太好。
基本上应该是这样的
1. Cron启动->
2. 更新mysql数据库中每个用户的统计信息->
3.
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 Syntax
事件调度程序默认状态为DISABLED。
您需要通过以下任何语句来启用它。
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;
当Event Scheduler处于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)
一旦Event Scheduler设置为ON,您将看到它正在工作。
参考: MySQL Event Scheduler Configuration