广州凡科互联网科技有限公司

营业时间
MON-SAT 9:00-18:00

全国服务热线
18720358503

公司门店地址
广州市海珠区工业大道北67号凤凰创意园

改动mysql配备使blog定时执行发博文

日期:2021-05-14 浏览:

改动mysql配备使blog定时执行发博文


短视頻,自新闻媒体,达人种草1站服务 php程序流程是脚本制作,仅有顾客端开启才会实行。而许多企业网站建设全过程中都必须定时执行作用,例如每日夜里零晨数据信息库全自动统计分析数据信息等。本文要讲述的是运用mysql的恶性事件生产调度event_scheduler完成定时执行发博文。

以wordpressblog数据信息表为事例解读基本原理(wp许多本人站长都熟习):

wordpress有个wp_posts表(储放文章内容,多新闻媒体文档),这个表有个字段叫post_status(情况)。这个字段有几个特性,在其中publish表明公布,draft表明文稿。假如可以自身操纵在某个時间点把draft改成publish,那末这个文章内容的情况不就从文稿变为了公布情况了么!

我发现wordpress后台管理仿佛沒有设定定时执行的选项,由于php自身不适用定时执行实行。

假如blog要完成定时执行发信,该怎样呢?

①设定mysql恶性事件生产调度器。(后文)

②后台管理设定文稿后手动式数据信息表post_date字段。

好了,不坑骗wordpress博主了。真要这么做的站长便是个2逼,用windows live writer多便捷...

本站用thinkphp写的,后台管理能够定时执行公布。php自身不适用定时执行实行,因此才有mysql恶性事件生产调度器的应用。

切入正题,流程来了~

①开启数据信息库管理方法面板,实行下面的sql。

1SHOW VARIABLES LIKE event_scheduler

 

假如event_schedules的值是OFF,表明你的数据信息库并沒有打开恶性事件生产调度器。

②打开恶性事件生产调度器。实行下面的sql。

1SET GLOBAL event_scheduler = ON

在我试验的情况下,发现1个难题。假如数据信息库重新启动,那末event_scheduler又变为了OFF。哪有1年365天不断平稳的数据信息库服务器呢~~

③ 改动mysql配备文档mysql.ini,默认设置打开event_scheduler。

在mysql安裝的文档夹下寻找配备文档my.ini,在[mysqld]的下面再加1句:event_scheduler=ON。这样mysql在起动的情况下event sheduler就会全自动起动了。

linux系统软件的mysql配备文档在 /etc 文档夹下,myf文档(windows系统软件是my.ini文档)。linux下用 find 指令搜索。

④点一下进到必须实行定时执行的数据信息表,在此表下实行以下sql。

DROP EVENT IF EXISTS icaigen_post;
CREATE EVENT icaigen_post
ON SCHEDULE EVERY 300 SECOND
DO UPDATE sre_posts SET post_status = 0 WHERE id IN ( SELECT a.id FROM ( SELECT tmp.* FROM sre_posts tmp ) a WHERE a.post_status = 1 AND (a.post_time - UNIX_TIMESTAMP()) 0 );

解释1下:icaigen_post是恶性事件的EVENT的名字,姓名随意取。第1行编码的意思是假如以前数据信息表格中存在这个event,则删除。

第3行 ON SCHDULE EVERY 300 SECOND 是指每隔300s实行1次后边(DO)的句子。

关键便是这条SQL句子。

1UPDATE sre_posts SET post_status = 0 WHERE id IN ( SELECT a.id FROM ( SELECT tmp.* FROM sre_posts tmp ) a WHERE a.post_status = 1 AND (a.post_time - UNIX_TIMESTAMP()) 0 );

这里用了1个临时性表,由于mysql不容许在1条句子里实行搜索1个表后在改动这个表,因此用临时性表储存非空子集。这个难题blog上有文章内容专业叙述过,我也是从初中到了这点。参照:

post_time是博文公布時间,UNIX_TIMESTAMP()是当今時间戳,由于我存的博文時间是時间戳,因此这里和時间戳较为。铛铛前時间戳超过定时执行時间(公布時间)时,就把post_status = 1 (数据信息字段含意,1表明文稿,0表明公布)改动为0。

由于这个event句子是每隔30秒实行1次,因此博文公布時间最大偏差为30秒。

有关mysql event的详尽详细介绍,可参照这篇文章内容:




新闻资讯

联系方式丨CONTACT

  • 全国热线:18720358503
  • 传真热线:18720358503
  • Q Q咨询:2639601583
  • 企业邮箱:2639601583@qq.com

首页
电话
短信
联系