2014-10-02 72 views
2

我正在尝试在工作中设置MediaWiki站点。我希望它在多个站点上具有恢复能力,因此我计划使用1个主数据库进行写操作,然后为每个Web安装分配一个本地从数据库。这将意味着我将有:站点弹性MediaWiki安装

服务器1:MySQL主
服务器2:MySQL从,阿帕奇+ MW
服务器3:MySQL从,阿帕奇+ MW
...
服务器N:MySQL从,Apache + MW

我想要发生的事情是,如果一个站点“变黑”,它们仍然有一个以只读模式运行的本地副本,直到它能够联系主MySQL服务器再次。我在1台从属主机上设置了下面的配置文件,它工作正常。但是,一旦我关闭主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) 
    ); 

我错过了从配置的东西,这是我能够做一些事情,或者它不工作,因为它不打算工作方式?任何帮助表示赞赏。

回答

0

这不是任何“最佳实践”,而是代替任何其他答案,我将它发布给任何需要快速解决方法的人。

这是一个PHP脚本,它直接位于LocalSettings.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);