如何升级QuestDB Docker版本且不丢失容器内的持久化数据
QuestDB跨版本容器数据迁移方案
QuestDB 5.x到6.x版本的存储格式完全向后兼容,无需做格式转换即可直接迁移原有数据,可按以下两种方案操作:
前置准备
首先停止旧版本容器,避免读写过程中拷贝数据导致文件损坏:
docker stop old_questdb
方案1:导出数据目录挂载到新容器(生产环境推荐)
QuestDB官方容器默认的数据存储路径为容器内的/root/.questdb目录,先将旧容器内的该目录拷贝到宿主机本地备份:
# 拷贝旧容器数据到当前目录下的questdb_data文件夹 docker cp old_questdb:/root/.questdb ./questdb_data
拷贝完成后启动6.0.4版本容器,直接挂载本地备份的数据目录即可:
docker run --name new_questdb \ -p 9000:9000 -p 9009:9009 \ -v ./questdb_data:/root/.questdb \ questdb/questdb:6.0.4-linux-amd64
启动完成后可先登录web控制台验证数据完整性,确认无问题后再删除旧容器即可。
方案2:直接复用旧容器匿名卷(临时测试使用)
如果不需要把数据落地到宿主机,也可以在启动新容器时直接继承旧容器的所有卷挂载配置:
docker run --name new_questdb \ -p 9000:9000 -p 9009:9009 \ --volumes-from old_questdb \ questdb/questdb:6.0.4-linux-amd64
注意:该方案下旧容器不能删除,一旦旧容器被删除,对应的匿名存储卷也会被Docker自动回收,会导致数据丢失。
验证建议
- 首次启动新版本容器后,优先核对核心业务表的数据行数、时间范围是否和旧版本一致
- 确认启动日志无报错、查询功能正常后再切换业务流量
- 生产环境操作前务必先备份旧容器的完整数据目录
内容的提问来源于stack exchange,提问作者BurningFlan
相关产品推荐
相关产品推荐

