2013-03-15 43 views
0

我們在一個環境中運行Wordpress,該環境在負載均衡器後面具有多主數據庫。當WP嘗試更新wp_options中的cron表時,錯誤日誌中充滿了死鎖錯誤。我們完全禁用了wp-cron,但仍然看到錯誤,所以有兩個問題:Wordpress多主數據庫複製:在wp_options中更新cron表時出現死鎖

1)什麼原因導致wp_options中的cron表被更新?

2)它出現運行在每個頁面加載。這可以禁用和cronjob設置定期在crontab中運行它?

感謝

回答

1

WordPress使用WP-cron.php爲運行計劃任務時,用戶沒有訪問或希望通過UNIX安裝cronjobs的手段。此過程查看wp_options中cron表中的計劃作業,並且如果指定的時間(或更多)已過,則該作業將執行。

wp-cron.php使用wp-includes/cron.php(Wordpress Cron API)來運行預定作業。在cron.php中,你會發現許多更新cron表格的函數,這些函數都是圍繞着事件的調度。

需要調度事件的Wordpress或插件的任何函數都使用Cron API來執行此操作。但是,調度事件(即使它已經存在)的操作會更新wp_options中的cron表。即使wp-cron.php完全禁用,Wordpress /插件的這些元素也正在加載和調度它們的事件,試圖更新過程中的cron表。

除了知道它必須與DB /站點配置有關外,我還沒有明確知道爲什麼發生死鎖,但我現在知道Wordpress正在自我表現。

0

我遇到了同樣的問題 - 數據庫會很快失去同步。某些插件使其發生得更快(他們安排了大量cron作業),但即使將它們禁用了,最終錯誤也會阻止複製。

我能夠通過做兩件事來保持複製工作。

首先,在的my.ini,是添加:

slave-skip-errors = 1062 

這指示MySQL跳過創建條目時,重複的鍵已經存在。我的集羣設置爲主動 - 被動,所以從理論上講,除非主動節點關閉,否則不應該對被動MySql節點進行「真正」寫入,在這種情況下,不會有對該節點的「真正」寫入。寫入被動節點的唯一東西是wp-cron作業的結果,這些作業(理論上)也在主動節點上運行。

第二,在每個站點的WP-的config.ini,是添加:

/** disable cron */ 
define('DISABLE_WP_CRON', true); 

從根本上運行時,此塊WP-cron的,所以這兩種解決方案之一應該對自己的工作。

另一種方法是禁用wp-cron,但保留全數據庫同步,並安排一個腳本來調用每個站點的wp-cron.php(您將手動完成wp-cron服務的工作自動)。這樣,它只會在主動節點上運行,並且應該將數據同步到被動節點,而不會出現問題。