您的位置: 昌平信息港 > 金融

修改mysql配置使博客定時发博文7z

发布时间:2019-06-13 13:40:16

php程序是脚本,只有客户端触发才会执行。而很多站建设过程中都需要定时功能,比如每天晚上凌晨数据库自动统计数据等。本文要讲述的是利用mysql的事件调度event_scheduler实现定时发博文。

以wordpress博客数据表为例子讲解原理(wp很多个人站长都熟悉):

wordpress有个wp_posts表(存放文章,多媒体文件),这个表有个字段叫post_status(状态)。这个字段有几个属性,其中publish表示发布,draft表示草稿。如果能够自己控制在某个时间点把draft改为publish,那么这个文章的状态不就从草稿变成了发布状态了么!

我发现wordpress后台好像没有设置定时的选项,因为php本身不支持定时执行。

如果博客要实现定时发信,该如何呢?

①设置mysql事件调度器。(后文)

②后台设置草稿后手动数据表post_date字段。

好了,不忽悠wordpress博主了。真要这么做的站长就是个二逼,用windows live writer多方便...

本站用thinkphp写的,后台可以定时发布。php本身不支持定时执行,所以才有mysql事件调度器的使用。

切入正题,步骤来了~

①打开数据库管理面板,执行下面的sql。

1SHOW VARIABLES LIKE event_scheduler

如果event_schedules的值是OFF,表示你的数据库并没有开启事件调度器。

②开启事件调度器。执行下面的sql。

1SET GLOBAL event_scheduler = ON

在我实验的时候,发现一个问题。如果数据库重启,那么event_scheduler又变成了OFF。那有一年365天持续稳定的数据库服务器呢~~

③ 修改mysql配置文件i,默认开启event_scheduler。

在mysql安装的文件夹下找到配置文件i,在[mysqld]的下面加上一句:event_scheduler=ON。这样mysql在启动的时候event sheduler就会自动启动了。

linux系统的mysql配置文件在 /etc 文件夹下,my.f文件(windows系统是i文件)。linux下用 find 命令查找。

④点击进入需要执行定时的数据表,在此表下执行如下sql。

DROP EVENT IF EXISTS icaigen_post;CREATE EVENT icaigen_postON SCHEDULE EVERY 300 SECONDDO UPDATE sre_posts SET post_status = 0 WHERE id IN ( SELECT FROM ( SELECT tmp.* FROM sre_posts tmp ) a WHERE st_status = 1 AND (st_time - UNIX_TIMESTAMP()) 0 );

解释一下:icaigen_post是事件的EVENT的名称,名字任意取。行代码的意思是如果之前数据表中存在这个event,则删掉。

第三行 ON SCHDULE EVERY 300 SECOND 是指每隔300s执行一次后面(DO)的语句。

重点就是这条SQL语句。

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

这里用了一个临时表,因为mysql不允许在一条语句里执行查找一个表后在修改这个表,所以用临时表存储子集。这个问题blog上有文章专门描述过,我也是从中学到了这点。参考:

://.blogs./chy1000/archive/2010/03/02/ml

post_time是博文发布时间,UNIX_TIMESTAMP()是当前时间戳,因为我存的博文时间是时间戳,所以这里和时间戳比较。当当前时间戳大于定时时间(发布时间)时,就把post_status = 1 (数据字段含义,1表示草稿,0表示发布)修改为0。

因为这个event语句是每隔30秒执行一次,所以博文发布时间误差为30秒。

关于mysql event的详细介绍,可参考这篇文章:

://hu./ml

开发微商城费用多少
静脉曲张护理
微店网页版官网
猜你会喜欢的
猜你会喜欢的