I’ve been trying to replicate locally a bug with MediaWiki’s GlobalPreferences extension. The bug is about the increased number of database reads that happen when the extension is loaded, and the increase happens not on the database table that stores the global preferences (as might be expected) but rather on the ‘local’ tables. However, locally I’ve had all of these running on the same database server, which makes it hard to watch the standard monitoring tools to see differences; so, I set things up on two database servers locally.
Firstly, this was a matter of starting a new MySQL server in a Docker container (accessible at 127.0.0.1:3305 and with its data in a local directory so I could destroy and recreate the container as required):
docker run -it -e MYSQL_ROOT_PASSWORD=pwd123 -p3305:3306 -v$PWD/mysqldata:/var/lib/mysql mysql
(Note that because we’re keeping local data, root’s password is only set on the first set-up, and so the
MYSQL_ROOT_PASSWORD can be left off future invocations of this command.)
Then it’s a matter of setting up MediaWiki to use the two servers:
$wgLBFactoryConf = [
'class' => 'LBFactory_Multi',
'sectionsByDB' => [
// Map of database names to section names.
'mediawiki_wiki1' => 's1',
'wikimeta' => 's2',
'sectionLoads' => [
// Map of sections to server-name/load pairs.
'DEFAULT' => [ 'localdb' => 0 ],
's1' => [ 'localdb' => 0 ],
's2' => [ 'metadb' => 0 ],
'hostsByName' => [
// Map of server-names to IP addresses (and, in this case, ports).
'localdb' => '127.0.0.1:3306',
'metadb' => '127.0.0.1:3305',
'serverTemplate' => [
'dbname' => $wgDBname,
'user' => $wgDBuser,
'password' => $wgDBpassword,
'type' => 'mysql',
'flags' => DBO_DEFAULT,
'max lag' => 30,
$wgGlobalPreferencesDB = 'wikimeta';