HyperDB应该能够处理只读(只)数据库实例吗?

时间:2015-02-05 作者:David E. Smith

我正试图通过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;
}

1 个回复
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个数据库更新。

结束

相关推荐

是否可以使用HyperDB拆分数据库表?

我正在寻找实现HyperDB或了解HyperDB的人的答案。我有一个数据库,大约一周前刚超过100mb,问题是我的主机一次只允许100mb的数据库。我想实现HyperDB,但想先了解一些信息。仅在数据库的posts表上,我当前的数据库就有大约100mb。如果我实现HyperDB,这个表会在两个数据库之间拆分吗?