Scenario:
I have a setup of 2 database servers:
- mariadb-mw (contains main MediaWiki database, named wikidb, user wikidb)
- mariadb-extst (contains external storage database, named wikiextst, user wikiextst)
Settings:
## Database settings $wgDBtype = "mysql"; $wgDBserver = "localhost:/run/mysqld/mariadb-mw.sock"; $wgDBname = "wikidb"; $wgDBuser = "wikidb"; $wgDBpassword = "wikidb"; $wgDBservers = [ [ 'host' => $wgDBserver, 'user' => $wgDBuser, 'password' => $wgDBpassword, 'dbname' => $wgDBname, 'type' => $wgDBtype, 'flags' => DBO_DEFAULT, 'load' => 1, ] ]; $wgExternalStores = array('DB'); $wgExternalServers = array( 'text1' => array ( array( 'host' => 'localhost:/run/mysqld/mariadb-extst.sock', 'user' => 'wikiextst', 'password' =>'wikiextst', 'dbname' => 'wikiextst', 'type' => "mysql", 'load' => 1 ), ) ); $wgDefaultExternalStore = array ( 'DB://text1' );
This setup works perfectly fine on MediaWiki 1.30. However, on MediaWiki 1.31 access to the text of any revision (External Storage) results in a database exception:
Wikimedia\Rdbms\DBConnectionError from line 1004 of /mediawiki-1.31.0/includes/libs/rdbms/database/Database.php:
Cannot access the database: Access denied for user 'wikiextst'@'localhost' to database 'wikidb' (localhost:/run/mysqld/mariadb-extst.sock)
#0 /mediawiki-1.31.0/includes/libs/rdbms/loadbalancer/LoadBalancer.php(1134): Wikimedia\Rdbms\Database->reportConnectionError(string)
#1 /mediawiki-1.31.0/includes/libs/rdbms/loadbalancer/LoadBalancer.php(749): Wikimedia\Rdbms\LoadBalancer->reportConnectionError()
#2 /mediawiki-1.31.0/includes/libs/rdbms/loadbalancer/LoadBalancer.php(831): Wikimedia\Rdbms\LoadBalancer->getConnection(integer, array, boolean, integer)
#3 /mediawiki-1.31.0/includes/externalstore/ExternalStoreDB.php(141): Wikimedia\Rdbms\LoadBalancer->getConnectionRef(integer, array, Wikimedia\Rdbms\DatabaseDomain)
#4 /mediawiki-1.31.0/includes/externalstore/ExternalStoreDB.php(207): ExternalStoreDB->getSlave(string)
#5 /mediawiki-1.31.0/includes/externalstore/ExternalStoreDB.php(48): ExternalStoreDB->fetchBlob(string, string, boolean)
#6 /mediawiki-1.31.0/includes/externalstore/ExternalStore.php(86): ExternalStoreDB->fetchFromURL(string)
#7 /mediawiki-1.31.0/includes/Storage/SqlBlobStore.php(400): ExternalStore::fetchFromURL(string, array)
#8 /mediawiki-1.31.0/includes/libs/objectcache/WANObjectCache.php(1240): MediaWiki\Storage\SqlBlobStore->MediaWiki\Storage\{closure}(boolean, integer, array, NULL)
#9 /mediawiki-1.31.0/includes/libs/objectcache/WANObjectCache.php(1114): WANObjectCache->doGetWithSetCallback(string, integer, Closure, array)
#10 /mediawiki-1.31.0/includes/Storage/SqlBlobStore.php(404): WANObjectCache->getWithSetCallback(string, integer, Closure, array)
#11 /mediawiki-1.31.0/includes/Storage/SqlBlobStore.php(349): MediaWiki\Storage\SqlBlobStore->expandBlob(string, array, string)
#12 /mediawiki-1.31.0/includes/Storage/SqlBlobStore.php(277): MediaWiki\Storage\SqlBlobStore->fetchBlob(string, integer)
#13 /mediawiki-1.31.0/includes/libs/objectcache/WANObjectCache.php(1240): MediaWiki\Storage\SqlBlobStore->MediaWiki\Storage\{closure}(boolean, integer, array, NULL)
#14 /mediawiki-1.31.0/includes/libs/objectcache/WANObjectCache.php(1114): WANObjectCache->doGetWithSetCallback(string, integer, Closure, array)
#15 /mediawiki-1.31.0/includes/Storage/SqlBlobStore.php(279): WANObjectCache->getWithSetCallback(string, integer, Closure, array)
#16 /mediawiki-1.31.0/includes/Storage/RevisionStore.php(921): MediaWiki\Storage\SqlBlobStore->getBlob(string, integer)
#17 /mediawiki-1.31.0/includes/Storage/RevisionStore.php(865): MediaWiki\Storage\RevisionStore->loadSlotContent(MediaWiki\Storage\SlotRecord, NULL, NULL, NULL, integer)
#18 [internal function]: MediaWiki\Storage\RevisionStore->MediaWiki\Storage\{closure}(MediaWiki\Storage\SlotRecord)
#19 /mediawiki-1.31.0/includes/Storage/SlotRecord.php(308): call_user_func(Closure, MediaWiki\Storage\SlotRecord)
#20 /mediawiki-1.31.0/includes/Storage/RevisionRecord.php(173): MediaWiki\Storage\SlotRecord->getContent()
#21 /mediawiki-1.31.0/includes/Revision.php(937): MediaWiki\Storage\RevisionRecord->getContent(string, integer, User)
#22 /mediawiki-1.31.0/includes/page/Article.php(368): Revision->getContent(integer, User)
#23 /mediawiki-1.31.0/includes/page/Article.php(562): Article->fetchContentObject()
#24 /mediawiki-1.31.0/includes/actions/ViewAction.php(68): Article->view()
#25 /mediawiki-1.31.0/includes/MediaWiki.php(500): ViewAction->show()
#26 /mediawiki-1.31.0/includes/MediaWiki.php(294): MediaWiki->performAction(Article, Title)
#27 /mediawiki-1.31.0/includes/MediaWiki.php(861): MediaWiki->performRequest()
#28 /mediawiki-1.31.0/includes/MediaWiki.php(524): MediaWiki->main()
#29 /mediawiki-1.31.0/index.php(42): MediaWiki->run()
#30 {main}The important thing:
Note how it's trying to access the external storage database using the main database name. I don't understand why, because the correct database name is specified in $wgExternalServers