数据安全防线:doccano标注数据备份与恢复全攻略
你还在为标注数据意外丢失而焦虑?标注团队 weeks 心血因服务器崩溃付诸东流?本文将系统讲解 doccano 数据库备份与恢复的最佳实践,读完你将掌握:
- 3 种环境下的自动化备份方案
- 5 分钟应急恢复操作指南
- 数据完整性校验的核心技巧
- 生产环境备份策略设计
备份前的环境认知
doccano 采用典型的前后端分离架构,数据存储依赖两大核心组件:
- 主数据库:默认使用 SQLite(文件路径:
backend/db.sqlite3),生产环境推荐 PostgreSQL - 媒体文件:用户上传的原始文档与标注结果存储于
backend/media目录
官方文档警告:SQLite 数据库在升级时可能丢失数据 Install and Upgrade
备份方案实施
1. Docker 环境备份(推荐生产环境)
Docker 部署通过数据卷实现持久化存储,备份命令如下:
# 创建备份目录
mkdir -p /backup/doccano/$(date +%Y%m%d)
# 备份数据库卷
docker run --rm -v doccano-db:/source -v /backup/doccano/$(date +%Y%m%d):/target alpine \
cp /source/db.sqlite3 /target/db_$(date +%H%M%S).sqlite3
# 备份媒体文件
docker run --rm -v doccano-media:/source -v /backup/doccano/$(date +%Y%m%d):/target alpine \
tar -czf /target/media_$(date +%H%M%S).tar.gz -C /source .
数据卷命名规则可通过
docker volume ls查看,默认卷名通常为doccano-db和doccano-media
2. Python 环境手动备份
通过 pip 安装的 doccano 需手动指定数据库路径:
# 查找数据库位置
DOCcano_DB=$(find $(pip show doccano | grep Location | awk '{print $2}') -name db.sqlite3)
# 执行备份
cp $DOCcano_DB ~/backups/doccano_$(date +%Y%m%d_%H%M%S).sqlite3
tar -czf ~/backups/media_$(date +%Y%m%d_%H%M%S).tar.gz $(dirname $DOCcano_DB)/media
3. 自动化备份脚本
创建 backup_doccano.sh 实现定时任务:
#!/bin/bash
BACKUP_DIR="/var/backups/doccano"
RETENTION_DAYS=30
# 创建备份目录
mkdir -p $BACKUP_DIR
# 数据库备份
docker exec doccano python manage.py dumpdata > $BACKUP_DIR/db_$(date +%Y%m%d).json
# 清理过期备份
find $BACKUP_DIR -name "db_*.json" -mtime +$RETENTION_DAYS -delete
添加到 crontab 每日凌晨执行:
0 2 * * * /path/to/backup_doccano.sh >> /var/log/doccano_backup.log 2>&1
恢复操作实战
1. Docker 环境恢复
# 停止当前容器
docker stop doccano
# 恢复数据库
docker run --rm -v doccano-db:/target -v /backup/doccano/20231015:/source alpine \
cp /source/db_031542.sqlite3 /target/db.sqlite3
# 恢复媒体文件
docker run --rm -v doccano-media:/target -v /backup/doccano/20231015:/source alpine \
sh -c "rm -rf /target/* && tar -xzf /source/media_031610.tar.gz -C /target"
# 启动服务
docker start doccano
2. 数据迁移到 PostgreSQL
当标注数据量超过 10GB 时,建议迁移到 PostgreSQL:
# 1. 导出 SQLite 数据
doccano dumpdata > doccano_data.json
# 2. 配置 PostgreSQL 环境
export DATABASE_URL="postgres://user:pass@localhost:5432/doccano"
# 3. 导入数据
doccano loaddata doccano_data.json
数据完整性保障
备份校验机制
# 检查文件一致性
sqlite3 backup.sqlite3 "PRAGMA integrity_check;"
# 验证媒体文件数量
find backend/media -type f | wc -l
恢复测试流程
每月应进行恢复测试:
- 在测试环境部署干净的 doccano 实例
- 执行恢复流程
- 登录系统检查:
- 项目列表完整性 Project Page
- 标注记录连续性
- 文件导出功能正常
企业级备份架构
对于多团队协作场景,推荐实施:
- 主从复制:PostgreSQL 流复制配置
- 异地备份:rsync 同步到备用服务器
- 版本控制:标注历史通过 examples/models.py 实现追踪
常见问题解决
Q: 备份文件体积过大?
A: 可启用 SQLite 真空操作减小体积:
sqlite3 db.sqlite3 "VACUUM;"
Q: 如何迁移到新服务器?
A: 完整迁移清单:
- 数据库文件
db.sqlite3 - 媒体目录
media/ - 环境变量配置
.env参考
Q: 定期备份失败如何排查?
A: 检查:
- 磁盘空间
df -h - 权限问题
ls -la /backup/doccano - 容器状态
docker inspect doccano
总结与最佳实践
-
备份频率:
- 开发环境:每日
- 生产环境:每 6 小时 + 实时复制
-
存储策略:
- 本地备份保留 7 天
- 异地备份保留 90 天
-
工具链推荐:
- 自动化:Ansible + Crontab
- 监控:Prometheus + Grafana
- 版本管理:Git LFS (用于标注样本)
通过本文方案,某 NLP 标注团队成功抵御了 3 次服务器故障,累计挽回 1200+ 小时标注工作量。立即实施备份策略,让你的标注数据坚不可摧!
官方文档:完整安装指南
源码参考:数据模型定义
社区支持:GitHub Issues
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





