dnf 事务回滚
dnf 为每一次事务(安装、升级、卸载)分配编号并记录前后状态,所以升级出错时可以先查历史再决定回滚方式:undo 反转指定的一次事务,rollback 回滚到某个事务之前的状态,二者都会连带处理依赖版本,比手工降级可靠得多。要清楚它的边界:回滚只涉及软件包,不会还原手工改过的配置与业务数据。数据库这类有状态服务,升级前的数据备份仍然不可缺少。
基本信息
| 适用平台 | RHEL 8 及以上、Fedora 等使用 dnf 的系统;yum 4 也提供同样的 history 子命令 |
|---|---|
| 命令语法 | dnf history [list|info|undo|rollback|redo] [事务号] |
| 常用子命令 | list 列出事务 info 查看明细 undo 反转指定事务 rollback 回滚到某事务之前 redo 重做 |
| 前置条件 | 旧版本包仍能从仓库获取,仓库已清理旧版本会导致操作失败 |
| 数据边界 | 只回滚软件包,不涉及配置文件与业务数据 |
典型使用场景
- 升级后服务起不来,需要快速回退到升级前版本
- 误装了一批不兼容的包,撤销整次事务
- 排查某次操作到底安装或删除了什么
- 发布前核对本次变更清单
- 演练回滚流程,验证预案是否可行
三步回滚
三步回滚
dnf history | head -n 15
dnf history info <事务号> # 看这次装了什么、删了什么、升级了什么
dnf history undo <事务号> # 反转该事务
dnf history rollback <事务号> # 回滚到该事务之前的状态
dnf history info <新事务号> # 核对撤销结果
systemctl restart <服务> && systemctl status <服务> --no-pager | headundo 与 rollback 的差别
| 子命令 | 作用范围 | 适用场景 |
|---|---|---|
| undo | 反转指定的那一次事务 | 只想撤销刚才那一步操作 |
| rollback | 回滚到指定事务之前,撤销其后的所有事务 | 多次误操作后统一回到某个时间点 |
| redo | 重新执行某次已回滚的事务 | 误回滚后的补救 |
| info | 查看事务明细 | 撤销前评估影响范围 |
undo 会按当时记录恢复版本,但期间手工修改的配置与数据不会回滚。有状态服务在升级前必须单独备份数据,回滚不能替代备份。
回滚依赖仓库里还能取到旧版本。若仓库已更新或清理过旧包,undo 会因为找不到包而失败,此时只剩快照或备份可用。