修改mysql配置使博客定時發博文

來源:互聯網
上載者:User

仲介交易 HTTP://www.aliyun.com/zixun/aggregation/6858.html">SEO診斷 淘寶客 雲主機 技術大廳

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設定檔mysql.ini,預設開啟event_scheduler。

在mysql安裝的資料夾下找到設定檔my.ini,在[mysqld]的下面加上一句:event_scheduler=ON。 這樣mysql在啟動的時候event sheduler就會自動啟動了。

linux系統的mysql設定檔在 /etc 資料夾下,my.cnf檔(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 );

解釋一下:icaigen_post是事件的EVENT的名稱,名字任意取。 第一行代碼的意思是如果之前資料表中存在這個event,則刪掉。

第三行 ON SCHDULE EVERY 300 SECOND 是指每隔300s執行一次後面(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_st atus = 1 AND (a.post_time - UNIX_TIMESTAMP()) < 0 );

這裡用了一個臨時表,因為mysql不允許在一條語句裡執行查找一個表後在修改這個表,所以用臨時表存儲子集。 這個問題cnblog上有文章專門描述過,我也是從中學到了這點。 參考:

HTTP://www.cnblogs.com/chy1000/archive/2010/03/02/1676282.html

post_time是博文發佈時間,UNIX_TIMESTAMP()是目前時間戳,因為我存的博文時間是時間戳記,所以這裡和時間戳記比較。 當目前時間戳大於定時時間(發佈時間)時,就把post_status = 1 (資料欄位含義,1表示草稿,0表示發佈)修改為0。

因為這個event語句是每隔30秒執行一次,所以博文發佈時間最大誤差為30秒。

關於mysql event的詳細介紹,可參考這篇文章:

HTTP://netzp.blog.sohu.com/103852537.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.