我正试图通过MySQL主/从复制使我的WordPress数据库更有弹性。为此,我安装了HyperDB,主数据库作为读/写数据库,从数据库作为只读数据库。
只要主数据库服务器和从数据库服务器都在运行,一切都正常。Web服务器向主数据库和从数据库发送查询。但是,一旦我关闭主数据库服务器,我的网站就会变得没有响应。我希望这些网站仍能正常运行,只是不能发布新文章之类的东西。
我是否对HyperDB插件抱有不切实际的期望,或者我是否有一些配置错误的地方?
下面是db配置的相关部分。php。这不仅仅是直接的$wpdb->add\\u database()调用,因为需要一点逻辑来确定“正确”的数据库服务器。在测试中,我尝试用简单的add\\u database()调用替换所有这些调用,但遇到了相同的问题。
// Returns wpdb-style array for use with add_database() copying settings from wp-config
function wshdb_get_template_db($host, $readpref = 1, $writepref = 1) {
$db_tmpl = array(
\'host\' => $host,
\'server\' => \'\', // only here to suppress a PHP error
\'dataset\' => \'global\',
\'lag_threshold\' => NULL,
\'user\' => DB_USER,
\'password\' => DB_PASSWORD,
\'name\' => DB_NAME,
\'timeout\' => 0.2,
\'read\' => $readpref,
\'write\' => $writepref
);
return $db_tmpl;
}
// Populate the wpdb array based on where we\'re running
$tmp_dbhost = explode(".", strtolower(gethostname()));
$host = $tmp_dbhost[0];
switch($host) {
// WP4 stage
case \'webserver1\':
case \'webserver2\':
$wpdb->add_database(wshdb_get_template_db(\'masterdb\'));
$wpdb->add_database(wshdb_get_template_db(\'slavedb\', 1, 0));
break;
// a bunch of other cases omitted
default:
$wpdb->add_database(wshdb_get_template_db(\'localhost\'));
break;
}
SO网友:Dave Lozier
我刚刚遇到了一个类似的问题。问题是主题正在更新“init”操作挂钩上的选项。
function theme_setup() {
update_option(\'thumbnail_size_w\', 170);
update_option(\'medium_size_w\', 470);
update_option(\'large_size_w\', 970);
}
add_action(\'init\', \'theme_setup\');
在每次页面加载时调用。这最好使用“after\\u switch\\u theme”操作挂钩来完成,该挂钩仅在主题被激活时发生。
function theme_setup() {
update_option(\'thumbnail_size_w\', 170);
update_option(\'medium_size_w\', 470);
update_option(\'large_size_w\', 970);
}
add_action(\'after_switch_theme\', \'theme_setup\');
此更改在每次页面加载时保存了3个数据库更新。