CentOS 7 安装 LibreOffice 提示 rpmdb open failed :rpm 数据库损坏修复指南
在 CentOS 7 服务器上安装 LibreOffice 时,执行如下命令:
yum install -y libreoffice libreoffice-writer libreoffice-calc libreoffice-impress libreoffice-draw libreoffice-headless libreoffice-langpack-zh-CN却出现了下面的错误:
[root@iZ2zecsmp66azumjhss4jbZ ~]# yum install -y libreoffice libreoffice-writer libreoffice-calc libreoffice-impress libreoffice-draw libreoffice-headless libreoffice-langpack-zh-CN
error: rpmdb: BDB0113 Thread/process 23586/140381186218048 failed: BDB1507 Thread died in Berkeley DB library
error: db5 error(-30973) from dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db5 - (-30973)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:
Error: rpmdb open failed很多人第一反应会认为是软件源出现了问题,其实并非如此。
真正的问题在于 RPM 包数据库(rpmdb)已经损坏 ,导致 yum 无法读取系统的软件包信息,因此任何安装、升级、卸载操作都会失败。
本文介绍完整的修复流程。
问题原因
CentOS 7 的 yum 底层依赖 RPM 数据库(rpmdb) 来管理所有已安装的软件包信息。
数据库默认位于:
/var/lib/rpm其中保存着:
- 已安装软件包列表
- 软件版本信息
- 依赖关系
- 安装记录
- 文件索引
当数据库损坏时,就会出现类似下面的错误:
BDB0087 DB_RUNRECOVERY
rpmdb open failed
cannot open Packages database其中:
- BDB 表示 Berkeley DB(CentOS 7 默认使用的数据库引擎)
- DB_RUNRECOVERY 表示数据库已经损坏,需要重新恢复
导致数据库损坏的常见原因包括:
- 服务器异常断电
yum或rpm执行过程中被强制终止- 磁盘空间不足
- 文件系统异常
- 非正常重启
第一步:修复 RPM 数据库
首先停止所有正在使用 RPM 的进程:
# 停止占用 rpm 的进程
killall -9 rpm yum 2>/dev/null然后删除 Berkeley DB 的临时锁文件(建议移动到临时目录,而不是直接删除):
# 备份原损坏库
mv /var/lib/rpm/__db* /tmp/接下来重新构建 RPM 数据库:
# 重建数据库
rpm --rebuilddb等待执行完成后,验证数据库是否恢复正常:
yum list如果 yum list 能够正常输出软件包列表,没有任何报错,则说明 RPM 数据库已经修复成功。
第二步:安装 LibreOffice
数据库恢复后,就可以继续安装 LibreOffice。
方式一:使用 CentOS 官方仓库版本(推荐)
CentOS 7 默认仓库通常提供 LibreOffice 5.x 版本,与系统自带的 glibc 兼容性最好。
安装命令如下:
yum install -y libreoffice libreoffice-writer libreoffice-calc libreoffice-impress libreoffice-draw libreoffice-headless libreoffice-langpack-zh-CN为了避免系统升级时自动更新 LibreOffice,可以锁定当前版本:
yum versionlock add libreoffice*这种方式最稳定,适用于绝大多数服务器环境。
方式二:安装 LibreOffice 6.4.7
如果官方仓库版本较低,或者项目需要较新的 LibreOffice,可以安装 6.4.7 。
首先安装依赖:
yum install -y epel-release mesa-libGLU libXss libXext libXi cairo cups-libs libSM libICE随后下载对应版本的 RPM 安装包并进行安装即可。
提示: LibreOffice 6.4.7 通常是 CentOS 7 上兼容性较好的较新版本。如果安装 7.x 或更高版本,很可能因系统
glibc版本过低而无法启动。
如果 rpm --rebuilddb 仍然失败
某些情况下,数据库损坏较严重,仅执行 rpm --rebuilddb 无法恢复。
可以尝试彻底清理 RPM 数据库缓存后重新构建:
# 完整重置 rpmdb
rm -rf /var/lib/rpm/__db*
rpm -vv --rebuilddb其中:
-vv用于输出更详细的日志,方便定位问题;- 重建过程可能持续几十秒甚至几分钟,请耐心等待,不要中途终止。
完成后再次执行:
yum list确认数据库已经恢复。
进一步排查建议
如果经过上述步骤仍然无法修复,可以继续检查以下几项:
检查磁盘空间
磁盘已满同样会导致 RPM 数据库无法正常工作。
df -h确保系统分区(尤其是 / 分区)还有足够的可用空间。
检查文件系统
如果服务器曾经异常断电,建议检查磁盘是否存在文件系统错误。
查看系统日志:
dmesg | grep -i error或查看最近的系统日志:
journalctl -xe如果发现大量 I/O Error,建议进一步检查磁盘健康状态。
检查数据库目录权限
确认 RPM 数据库目录权限正常:
ls -ld /var/lib/rpm一般应属于 root 用户,并具有正常的读写权限。
常见问题
为什么删除 __db* 文件不会影响已安装的软件?
不会。
__db* 文件只是 Berkeley DB 的缓存、锁文件和临时索引。
真正的软件包信息保存在 Packages 等数据库文件中,因此删除这些临时文件后重新执行:
rpm --rebuilddb即可重新生成缓存和索引。
rpm --rebuilddb 会卸载软件吗?
不会。
该命令仅重新建立数据库索引,不会删除任何已经安装的软件,也不会影响系统配置。
总结
当 CentOS 7 出现:
rpmdb open failed或:
DB_RUNRECOVERY几乎可以确定是 RPM 数据库损坏 导致的,而不是 yum 软件源的问题。
通常按照下面几个步骤即可恢复:
- 停止所有
rpm、yum相关进程; - 删除(或移动)
/var/lib/rpm/__db*临时数据库文件; - 执行
rpm --rebuilddb重建数据库; - 使用
yum list验证数据库是否恢复正常; - 重新安装 LibreOffice 或其他需要的软件。
另外,对于仍在使用 CentOS 7 的服务器,建议优先安装 LibreOffice 5.x (官方仓库版本)或 LibreOffice 6.4.7 等兼容性较好的版本,避免因新版 LibreOffice 对 glibc 的要求过高而导致程序无法启动。






