Mediawiki は Debian のアップグレード後にデータベースにアクセスできない

Mediawiki は Debian のアップグレード後にデータベースにアクセスできない

Debian 9「Stretch」サーバーを Debian 10「Buster」にアップグレードしました。これにより、Mediawiki もバージョン 1.31 にアップグレードされました。

update.php を実行しようとすると、「データベースにアクセスできません: データベース接続がありません」というエラーが表示されて失敗します。

/var/lib/mediawiki/maintenance# php update.php
MediaWiki 1.31.10 Updater

Your composer.lock file is up to date with current dependencies!
[6b70dd5bdc9deadcca99506a] [no req]   Wikimedia\Rdbms\DBConnectionError from line 1004 of /usr/share/mediawiki/includes/libs/rdbms/database/Database.php: Cannot access the database: No database connection
Backtrace:
#0 /usr/share/mediawiki/includes/libs/rdbms/loadbalancer/LoadBalancer.php(1140): Wikimedia\Rdbms\Database->reportConnectionError(string)
#1 /usr/share/mediawiki/includes/libs/rdbms/loadbalancer/LoadBalancer.php(750): Wikimedia\Rdbms\LoadBalancer->reportConnectionError()
#2 /usr/share/mediawiki/includes/GlobalFunctions.php(2813): Wikimedia\Rdbms\LoadBalancer->getConnection(integer, array, boolean)
#3 /usr/share/mediawiki/maintenance/Maintenance.php(1311): wfGetDB(integer, array, boolean)
#4 /usr/share/mediawiki/maintenance/update.php(147): Maintenance->getDB(integer)
#5 /usr/share/mediawiki/maintenance/doMaintenance.php(94): UpdateMediaWiki->execute()
#6 /usr/share/mediawiki/maintenance/update.php(248): require_once(string)
#7 {main}

データベースはPostgresqlで、psqletcで問題なくアクセスできます。

LocalSettings.php

## Database settings
$wgDBtype           = "postgres";
$wgDBserver         = "localhost";
$wgDBname           = "wikidb";
$wgDBuser           = "...";
$wgDBpassword       = "...";

# Postgres specific settings
$wgDBport           = "5432";
$wgDBmwschema       = "mediawiki";
$wgDBts2schema      = "public";

Mediawikiのデバッグログには、

IP: 127.0.0.1
Start command line script update.php
[caches] cluster: EmptyBagOStuff, WAN: mediawiki-main-default, stash: db-replicated, message: SqlBagOStuff, session: SqlBagOStuff
[caches] LocalisationCache: using store LCStoreNull
[DBConnection] Wikimedia\Rdbms\LoadBalancer::openConnection: calling initLB() before first connection.
[DBReplication] Wikimedia\Rdbms\LBFactory::getChronologyProtector: using request info {
    "IPAddress": "127.0.0.1",
    "UserAgent": false,
    "ChronologyProtection": false,
    "ChronologyPositionIndex": 0
}
[DBConnection] Wikimedia\Rdbms\LoadBalancer::openConnection: failed to connect to database 0 at 'localhost'.
[DBConnection] Wikimedia\Rdbms\LoadBalancer::reportConnectionError: connection error: Unknown error ([Null])
[exception] [6b70dd5bdc9deadcca99506a] [no req]   Wikimedia\Rdbms\DBConnectionError from line 1004 of /usr/share/mediawiki/includes/libs/rdbms/d
atabase/Database.php: Cannot access the database: No database connection

私は今完全に行き詰まっています...

答え1

コメントアウトしてみてください:

$wgDBmwschema       = "mediawiki";
$wgDBts2schema      = "public";

最初の設定のデフォルト値は変更されており、2 番目の設定は廃止されています。

答え2

新しいバージョンの MediaWiki では、MySQL 接続を切断する落とし穴がいくつかあります。修正の試みは次のとおりです。

  1. データベース ホストのポート番号を挿入します。
$wgDBserver = "localhost:3306";
  1. 古い LocalSettings.php には、Mysql 設定の他に PostgreSQL のアクティブな設定がいくつか存在します。これを消去するかコメント化します。
# Postgres specific settings
# $wgDBport           = "5432";
# $wgDBmwschema       = "mediawiki";
# $wgDBts2schema      = "public";
  1. 良い習慣として、ないmysql に root として接続します。wikidb データベース専用の通常のユーザーを作成します。
$mysql -u root -p
> create user wiki identified by 'xxxx';
> grant all privileges on wikidb.* to 'wiki'@'localhost';

答え3

問題は、システムが PHP をアップグレードしたが、Postgres の php pgsql モジュールを再インストールまたは再度有効化しなかったことであることが判明しました。

Debian 10からDebian 11にアップグレードしたときに同じ問題が再び発生し、次のように解決しました。

apt install php7.4-pgsql

Debian 12 にアップグレードすると、同じことが再び発生すると思います。

関連情報