繁体   English   中英

Mysql PHP Cron用于更新用户统计信息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM