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