2013-03-15 86 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服务的工作自动)。这样,它只会在主动节点上运行,并且应该将数据同步到被动节点,而不会出现问题。

相关问题