dbbot 升级与回滚
本文说明 dbbot 发行包在控制节点上的推荐升级方式,以及内置 CLI dbbotctl 当前版本能自动处理的范围。
1. 升级原则
不建议再使用下面这套手工流程:
- 备份
hosts.ini、common_config.yml等文件。 - 删除
/usr/local/dbbot。 - 解压新包。
- 再把旧配置拷回去。
这套方法的问题是:
- 步骤多,容易漏文件。
- 无法统一在线和离线流程。
- 配置文件被整包覆盖后,人工恢复成本高。
- 新版本模板里新增的内容不容易发现。
推荐做法是始终通过 /usr/local/dbbot/bin/dbbotctl 执行升级,让下载、快照、替换、自检、回滚走同一条路径。
2. 先做版本和环境检查
/usr/local/dbbot/bin/dbbotctl version
/usr/local/dbbot/bin/dbbotctl doctor
其中 doctor 会检查:
tar、python3、mktemp等本地命令curl或wget是否可用于在线升级- 绿色版 Ansible 入口是否可执行
- 控制节点本地磁盘空间
3. 在线升级
升级到最新 official release:
/usr/local/dbbot/bin/dbbotctl release upgrade --latest
升级到固定 tag:
/usr/local/dbbot/bin/dbbotctl release upgrade --tag v0.2.0
默认行为:
- 下载 release 包。
- 校验包结构。
- 创建升级快照。
- 替换受发行包管理的文件。
- 回放保留的本地状态。
- 运行
ansible-playbook --version与公开入口--syntax-check。
如需只看计划、不落盘,可先执行:
/usr/local/dbbot/bin/dbbotctl release upgrade --tag v0.2.0 --dry-run
4. 离线升级
如果控制节点不能联网,先把 release 包传到本地,再执行:
/usr/local/dbbot/bin/dbbotctl release upgrade --package /tmp/dbbot-v0.2.0.tar.gz
离线与在线只有“包从哪里来”不同,后续升级逻辑一致。
5. 当前版本会保留哪些内容
当前 dbbotctl release upgrade 会保留并回放下面这些本地状态:
mysql_ansible/inventory/mysql_ansible/downloads/mysql_ansible/playbooks/common_config.ymlmysql_ansible/playbooks/advanced_config.ymlmysql_ansible/playbooks/vars/mysql_ansible/playbooks/logs/clickhouse_ansible/inventory/clickhouse_ansible/downloads/clickhouse_ansible/playbooks/vars/clickhouse_ansible/playbooks/logs/monitoring_prometheus_ansible/inventory/monitoring_prometheus_ansible/downloads/monitoring_prometheus_ansible/playbooks/common_config.ymlmonitoring_prometheus_ansible/playbooks/vars/monitoring_prometheus_ansible/playbooks/logs/
其余受发行包管理的内容,例如 roles/、顶层 README、绿色版 Ansible、bin/dbbotctl、libexec/,会按新版本替换。
6. 回滚
查看升级历史:
/usr/local/dbbot/bin/dbbotctl release history
回滚到最近一次升级快照:
/usr/local/dbbot/bin/dbbotctl release rollback
回滚到指定快照:
/usr/local/dbbot/bin/dbbotctl release rollback 20260321T235959Z_v0.2.0
升级快照保存在:
/usr/local/dbbot/.dbbotctl/snapshots/
每个快照目录下会包含:
root-before-upgrade.tar.gz:升级前完整快照metadata.env:版本、来源、状态等元数据packaged-preserved-paths/:升级前会被“保留文件”覆盖掉的新包模板副本
7. 当前实现边界
当前版本的升级命令已经解决了“在线/离线统一入口、自动快照、自动回滚、自检”这些痛点,但它还没有做 YAML 键级别的智能合并。
这意味着:
- 你的旧配置会被保留下来,不会因为整包替换而直接丢失。
- 新包里同路径的新模板副本会保存在快照目录,便于人工对比。
- MySQL 和 Monitoring 因为本身有
default/*兜底,新参数兼容性相对更好。 - ClickHouse 变量文件当前仍建议在升级后重点复查。