2013-02-11 41 views
19

我必須每隔一小時更新我的​​MySQL數據庫,我想知道使用cronjob VS MySQL事件的優點/缺點?例如,哪個更快?哪個更安全?謝謝!Cronjob或MySQL事件?

+0

[Mysql的觸發/事件VS的cronjob]的可能重複(http://stackoverflow.com/questions/1734073/mysql-trigger-events-vs-cronjob) – bipen 2013-04-18 17:44:04

回答

14

我總是會去一個cron作業,這是因爲:

  • 這就是系統管理員會想到它是(這點沒有被低估)
  • crobtab是防彈,經過時間考驗的,非常廣泛的使用和理解
  • 你可以自由地直接/分析你想要的錯誤/成功消息
  • 某些數據庫任務需要/偏好mysql離線(例如完全備份),所以你必須使用cron對於那些 - 用cron完成一些任務並且完成一些任務是個不好的主意用mysql;你會在何處查找
  • 你可以鏈,如果你已經有了一個shell腳本

最後應遵循其他事件,只是因爲你可以做一些事情,並不意味着是個好主意。 Mysql擅長數據。不要將它用於「外殼」的東西。

+0

其實,如果該更新只是一個事的數據,將它放入SQL中是有意義的:確保數據是「OK」(可訪問,最新,優化等)的SQL工作,因此讓MySQL事件執行數據清理,優化,或在他們的活動中進行治療。 – Xenos 2017-07-01 18:26:16

+0

@ Xenos只是因爲一個技術*可以*做某事並不意味着它應該。在這種情況下,數據管理是一個*操作*問題,所以*操作*解決方案是最合適的。僅僅因爲任務需要執行SQL並不意味着數據庫也應該管理定期請求執行該SQL的任務。它也不是便攜式的。 – Bohemian 2017-07-01 21:23:59

17

MySQL事件調度程序 - 一個很好的替代cron。

我們都知道cron,這是一種調度某些進程的簡單方法,例如每週在您的MySQL數據庫中截斷日誌表。

在MySQL 5.1中,MySQL的傢伙們推出了一個新的酷炫功能:MySQL事件調度程序!

使用事件調度程序,您可以計劃要在數據庫上執行的任務。 這對於無法在其Web空間上創建cron作業的Web開發人員非常適合,因爲他們的主機不會讓他們! 它確實是cron的一個很好的替代品!

舉幾個例子:你想每週截斷應用程序日誌表

,這是你的活動日程應該怎麼樣子:

CREATE EVENT PurgeLogTable 
ON SCHEDULE EVERY 1 WEEK 
DO 
BEGIN 
DELETE FROM `logs` WHERE `LogTime` <= DATE_SUB(CURRENT_TIMESTAMP,INTERVAL 1 WEEK); 
INSERT INTO `audit` (`AuditDate`, `Message`) VALUES(NOW(), "Log table purged succesfully!"); 
END 
8

Mysql的介紹事件調度,我們可以使用替代的cronjob。與cronjob相比,它有很多優點:

1)它直接寫在Mysql服務器上。

2)這是平臺無關的。您的應用程序可能以任何不重要的語言編寫。你只需要知道mysql。 3)我們可以使用它們,只要有一個數據庫更新或清理需要在正常時間間隔。

4)每次不需要編譯查詢,因此性能提高。

5)錯誤可以登錄日誌文件。 語法:

DELIMITER // 
CREATE EVENT eventName 
ON SCHEDULE EVERY 1 WEEK 
STARTS 'Some Date to start' 
ENDS 'End date If any' 

DO 
BEGIN 
    // Your query will be here 
END// 
DELIMITER ; 

欲瞭解更多信息,您可以訪問官方網站:http://dev.mysql.com/doc/refman/5.1/en/create-event.html

細節博客:http://goo.gl/6Hzjvg

0

MySQL事件調度是對優勢共享主機環境。就時間而言,它也可以安排到第二個時間。不像cron,它是一分鐘 - 但你可以解決這個限制。

1

我與MySQL事件會程序器

,因爲我們不必代碼是一個額外的文件,我們的目的可以通過只寫一個查詢來實現。

如果只需要數據庫相關的操作,那麼mysql事件調度就是不錯的選擇。

0

請檢查下面的代碼:

if ($product_info) { 
    if ($product_info['image']) { 
     $image = $this->model_tool_image->resize($product_info['image'], $this->config->get($this->config->get('config_theme') . '_image_wishlist_width'), $this->config->get($this->config->get('config_theme') . '_image_wishlist_height')); 
    } 
    else { 
     $image = false; 
    } 
} 
0

我現在處理事件自己和思考同樣的:)

除了上述答案:

  • 使用事件如果任務純粹是以數據爲中心的,或者補充已經構建到數據庫中的功能。您可能已經擁有清理數據,記錄某些事件,彙總某些數據等的觸發器。如果要執行的計劃任務是現有設計的一部分,則從EVENT觸發任務更具有內聚性。畢竟事件是時間觸發器

  • 如果您從shell運行腳本,則需要存儲在shell腳本或默認文件中的用戶名/密碼。爲了執行EVENT,EVENT創建完成後,您不需要用戶名/密碼。

  • IMCO您應該在存儲過程中編寫邏輯;然後從EVENT或shell腳本調用該過程,無論最適合您。你甚至可以在你的用戶界面中建立一些讓用戶手動調用該程序的地方。

+0

格式化你的內容,如果看起來不錯,會更好。 – Billa 2018-02-21 09:41:41