fixslavedesync.php

来自「php 开发的内容管理系统」· PHP 代码 · 共 101 行

PHP
101
字号
<?php$wgUseRootUser = true;require_once( 'commandLine.inc' );//$wgDebugLogFile = '/dev/stdout';$slaveIndexes = array();for ( $i = 1; $i < count( $wgDBservers ); $i++ ) {	if ( $wgLoadBalancer->isNonZeroLoad( $i ) ) {		$slaveIndexes[] = $i;	}}/*foreach ( $wgLoadBalancer->mServers as $i => $server ) {	$wgLoadBalancer->mServers[$i]['flags'] |= DBO_DEBUG;}*/$reportingInterval = 1000;if ( isset( $args[0] ) ) {	desyncFixPage( $args[0] );} else {	$dbw =& wfGetDB( DB_MASTER );	$maxPage = $dbw->selectField( 'page', 'MAX(page_id)', false, 'fixDesync.php' );	for ( $i=1; $i <= $maxPage; $i++ ) {		desyncFixPage( $i );		if ( !($i % $reportingInterval) ) {			print "$i\n";		}	}}function desyncFixPage( $pageID ) {	global $slaveIndexes;	$fname = 'desyncFixPage';	# Check for a corrupted page_latest	$dbw =& wfGetDB( DB_MASTER );	$realLatest = $dbw->selectField( 'page', 'page_latest', array( 'page_id' => $pageID ), $fname );	$found = false;	foreach ( $slaveIndexes as $i ) {		$db =& wfGetDB( $i );		$latest = $db->selectField( 'page', 'page_latest', array( 'page_id' => $pageID ), $fname );		$max = $db->selectField( 'revision', 'MAX(rev_id)', false, $fname );		if ( $latest != $realLatest && $realLatest < $max ) {			print "page_latest corrupted in page $pageID, server $i\n";			$found = true;			break;		}	}	if ( !$found ) {		return;	}	# Find the missing revision	$res = $dbw->select( 'revision', array( 'rev_id' ), array( 'rev_page' => $pageID ), $fname );	$masterIDs = array();	while ( $row = $dbw->fetchObject( $res ) ) {		$masterIDs[] = $row->rev_id;	}	$dbw->freeResult( $res );	$res = $db->select( 'revision', array( 'rev_id' ), array( 'rev_page' => $pageID ), $fname );	$slaveIDs = array();	while ( $row = $db->fetchObject( $res ) ) {		$slaveIDs[] = $row->rev_id;	}	$db->freeResult( $res );	$missingIDs = array_diff( $masterIDs, $slaveIDs );	if ( count( $missingIDs ) ) {		print "Found " . count( $missingIDs ) . " missing revision(s), copying from master... ";		foreach ( $missingIDs as $rid ) {			print "$rid ";			# Revision			$row = $dbw->selectRow( 'revision', '*', array( 'rev_id' => $rid ), $fname );			foreach ( $slaveIndexes as $i ) {				$db =& wfGetDB( $i );				$db->insert( 'revision', get_object_vars( $row ), $fname, 'IGNORE' );			}			# Text			$row = $dbw->selectRow( 'text', '*', array( 'old_id' => $row->rev_text_id ), $fname );			foreach ( $slaveIndexes as $i ) {				$db =& wfGetDB( $i );				$db->insert( 'text', get_object_vars( $row ), $fname, 'IGNORE' );			}		}		print "done\n";	}	print "Fixing page_latest... ";	foreach ( $slaveIndexes as $i ) {		$db =& wfGetDB( $i );		$db->update( 'page', array( 'page_latest' => $realLatest ), array( 'page_id' => $pageID ), $fname );	}	print "done\n";}?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?