2014-10-02 59 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);