Wp-admin页面中的MySQL复制延迟问题

时间:2011-01-17 作者:Dave Morris

我有一个运行WP 3.0.1的环境,其中有一个主数据库和两个从数据库。我正在使用HyperDB强制所有写入都转到主服务器,所有读取都从两个从服务器读取。

我在wp admin页面中遇到了各种问题,其中数据正在写入主机,WordPress试图从从机读取,而数据尚未到达从机。这方面的一个例子是当我钩住\'dbx_post_advanced\' 在新帖子上预设一些类别和自定义分类术语。我已经验证,当我将HyperDB配置为仅从主机读写时,\'dbx_post_advanced\' 挂钩工作正常。

我目前正在研究以下选项来解决此问题:

仅将一台web服务器专用于所有wp admin流量将该服务器配置为仅向主数据库读写或从主数据库读写,将负载平衡器配置为将所有/wp admin url路由到该web服务器,将HyperDB配置为仅针对wp admin页对主数据库读写http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html

谢谢Dave

3 个回复
SO网友:Andy

你没有提到HyperDB版本,所以我假设trunk为337290。

HyperDB的SRTM功能(向主机发送读取)有两种工作方式。首先,它跟踪哪些表在当前脚本期间收到了写操作,并将这些表的所有后续读取发送给主机。其次,它为您提供了一种将所有读取内容强制提交给master的方法。

在第一种情况下,在写入同一个表后,读操作仍有可能命中从机。如果读取是一个联接查询或另一种查询,它可以将表名放在远离查询开头的地方,那么它可能会漏掉。如果可以检查不正确地发送到从属服务器的查询,请查看是否存在这种情况。如果是,请尝试增加substr 此处长度:

if ( preg_match($pattern, substr($query, 0, 1000)) )
重要的是要了解SRTM功能仅在一个脚本期间保持跟踪。因此,如果您编写一条记录(在第一个脚本中),然后重定向(现在在第二个脚本中),然后尝试从数据库中读取该记录,那么您可能正在从第二个脚本的从属脚本读取该记录。

最后,让我谈谈is_admin() 主意这是一个好主意,简单有效。在db配置文件中添加如下内容:

if ( is_admin() )
    $wpdb->send_reads_to_masters();

SO网友:Tom

我建议您部署另一个具有不同连接详细信息的站点副本http://admin.example.com/ 此管理区域将使用主连接详细信息并对主连接进行读写,不会因数据不可用而出现任何问题。通过在wp配置中设置标志,可以强制管理员URL不同。

    define(\'WP_SITEURL\', \'http://admin.example.com\');
    define(\'WP_CONTENT_URL\', \'http://admin.example.com\');
前端站点http://example.com/ 将像当前一样工作。

SO网友:p4guru

您是否研究过基于Wonder Replicator的MySQL复制http://code.google.com/p/tungsten-replicator/, 它改进了本机MySQL复制,并改善了从属延迟等http://vbtechsupport.com/1318/.

精彩的示例设置食谱,让您从http://code.google.com/p/tungsten-replicator/wiki/TungstenReplicatorCookbook

结束

相关推荐

为什么WordPress从MySQL获得的帖子来自虚拟主机名,而不是直接主机名?

我正在Mac上开发一个WordPress网站,运行OS X 10.6.4。在开发过程中,我使用OS X的内置Apache服务器在本地运行该站点。我已经安装了WordPress,并将其连接到OS X的MySQL,没有问题。该网站似乎运行良好,我可以发布、编辑等。WordPress安装在一个名为~/Sites/mysite.dev.我还定制了.hosts 文件和Apachehttpd-vhosts.conf 文件,以重定向对mysite的请求。请转到这个文件夹。所以当我进去的时候http://mysite.d