RPM数据库损坏修复:DB_RUNRECOVERY: Fatal error, run database recovery
报错示例
[root@localhost yum.repos.d]# yum clean all
error: rpmdb: BDB0113 Thread/process 34327/139867191024512 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
Error: Error: rpmdb open failed
这个错误表明 RPM 数据库损坏,导致 yum
无法读取软件包信息。以下是完整的解决方案:
一、错误原因
- RPM 数据库(
/var/lib/rpm
)因异常关机、磁盘错误或进程中断导致损坏。 - 错误关键信息:
DB_RUNRECOVERY: Fatal error, run database recovery
二、修复步骤
1. 备份当前数据库(重要!)
sudo cp -a /var/lib/rpm /var/lib/rpm.backup
2. 重建RPM数据库
sudo rpm --rebuilddb
3. 验证修复
sudo rpm -qa | head # 测试查询已安装包
sudo yum list installed | head
4. 清理YUM缓存
sudo yum clean all
5. 如果仍失败,手动恢复
# 删除损坏的数据库文件
sudo rm -f /var/lib/rpm/__db*
# 再次重建
sudo rpm --rebuilddb
三、验证完全恢复
sudo yum check
sudo yum list updates
应无任何错误输出。
总结
步骤 | 命令 | 作用 |
---|---|---|
备份数据库 | cp -a /var/lib/rpm /backup | 防止修复失败导致数据丢失 |
重建数据库 | rpm --rebuilddb | 90%问题的解决方案 |
清理缓存 | yum clean all | 确保读取新数据库 |
手动删除锁文件 | rm -f /var/lib/rpm/__db* | 处理残留锁文件 |
如果问题持续,可能需要检查磁盘健康状况(smartctl -a /dev/sda
)或考虑系统重装。