我将 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,我可以使用等正常访问它psql
。
我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
对于较新的 mediawiki 版本,存在一些会破坏 mysql 连接的缺陷。一些修复尝试如下:
- 在数据库主机上插入端口号:
$wgDBserver = "localhost:3306";
- 在一些旧的 LocalSettings.php 上,除了 Mysql 配置外,还有 PostgreSQL 的活动配置。删除或注释掉它。
# Postgres specific settings
# $wgDBport = "5432";
# $wgDBmwschema = "mediawiki";
# $wgDBts2schema = "public";
- 作为一种良好做法,请确保你不是以 root 身份连接到 mysql。仅为 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 时这种情况会再次发生。