Site Resilient MediaWiki安装

时间:2014-10-02 12:54:00

标签: mysql mediawiki

我正在尝试在工作中设置MediaWiki网站。我希望它在多个站点之间具有弹性,因此我计划的是1个主数据库来进行写入,然后是每个Web安装的本地从数据库。这意味着我会:

服务器1:MySQL Master
服务器2:MySQL Slave,Apache + MW
服务器3:MySQL Slave,Apache + MW
...
服务器N:MySQL Slave,Apache + MW

我想要发生的是,如果网站“变暗”,他们仍然会以只读模式运行MW的本地副本,直到它能够再次联系Master MySQL服务器。我在其中一个从属主机上设置了以下配置文件,工作正常。但是,一旦我关闭Master MySQL服务器以模拟连接丢失,MW就会出现数据库错误,而不仅仅是变为只读。

$wgDBservers = array(
      array('host' => "10.10.10.10",
          'dbname' => "db",
          'user' => "####",
          'password' => "####",
          'type' => "mysql",
          'flags' => DBO_DEFAULT,
          'load' => 0),
      array('host' => "localhost",
          'dbname' => "db",
          'user' => "####",
          'password' => "####",
          'type' => "mysql",
          'flags' => DBO_DEFAULT,
          'load' => 1)
    );

我是否遗漏了配置中的某些内容,这是我能够做到的,或者它不起作用,因为它无意以这种方式工作?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

这绝不是“最佳做法”,而是取代任何其他答案,我会将其发布给需要快速解决的任何人。

它是一个直接位于LocalSettings.php文件中的PHP脚本,用于检查主数据库的状态。这样做的“正确”方式可能是扩展,但我没有时间学习如何制作。您需要确保用于连接MySQL的用户帐户具有对从属数据库的只读访问权限。

$wgDBSite_Master = array('host' => "<master ip>", 'dbname' => "<database>", 'user' => "<user>", 'password' => "<pass>", 'type' => "mysql", 'flags' => DBO_DEFAULT, 'load' => 0);

$Site_MasterTest = mysql_connect($wgDBSite_Master['host'], $wgDBSite_Master['user'], $wgDBSite_Master['password']);

if (!$Site_MasterTest) {
$wgReadOnly = 'Wiki failed to contact the Master server.  Your site is currently running Dark.  No edits will be saved.<br>Last Error: '.mysql_error();
$wgSiteNotice = $wgReadOnly;
$wgDBservers = array();
}
else {
$wgSiteNotice = 'Everything running normally, Captain';
$wgDBservers = array( $wgDBSite_Master );
}
$wgDBservers[] = array('host' => "localhost", 'dbname' => "<database>", 'user' => '<user>', 'password' => "<pass>", 'type' => "mysql", 'flags' => DBO_DEFAULT, 'load' => 1);
相关问题