本系统已启用数据库保护机制,所有危险操作都需要双重确认才能执行。
以下操作被视为危险操作,需要特别确认:
| 操作 | 风险等级 | 确认方式 |
|---|---|---|
| 删除数据库文件 | 🔴 极高 | 输入 DELETE + DATABASE |
| 清空数据表 | 🔴 极高 | 输入 DELETE + DATABASE |
| 删除调研人员 | 🟠 高 | 输入确认码 DELETE_SURVEYOR_ID |
| 删除调研记录 | 🟡 中 | 输入确认码 DELETE_RECORD_ID |
| 重新导入商品数据 | 🟡 中 | 输入 DELETE + DATABASE |
使用安全启动脚本:
./safe_start.sh此脚本会:
- 检查数据库文件状态
- 显示各表记录数
- 启动后端服务
# ❌ 错误 - 会提示需要确认码
DELETE /api/surveyors/1
# ✅ 正确 - 传入确认码
DELETE /api/surveyors/1?confirm=DELETE_SURVEYOR_1# ❌ 错误 - 会提示需要确认码
DELETE /api/records/28
# ✅ 正确 - 传入确认码
DELETE /api/records/28?confirm=DELETE_RECORD_28运行导入脚本时需要双重确认:
cd backend
python import_products.py
# 提示:
# 1. 输入 'DELETE' 确认
# 2. 输入 'DATABASE' 最终确认如需跳过确认(仅用于自动化脚本):
export DB_GUARD_SKIP=1
python import_products.py如需添加新字段,使用 ALTER TABLE,绝不删除表:
# ✅ 正确 - 添加字段
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///data/survey.db')
with engine.connect() as conn:
conn.execute(text('ALTER TABLE products ADD COLUMN purchaser VARCHAR(50)'))
conn.commit()# ❌ 错误 - 会丢失所有数据!
# DROP TABLE products
# 或删除 survey.db 文件# 备份数据库文件
cp backend/data/survey.db "backend/data/survey.db.backup.$(date +%Y%m%d)"
# 备份照片
tar -czf "photos.backup.$(date +%Y%m%d).tar.gz" backend/static/photos/#!/bin/bash
# backup.sh
DATE=$(date +%Y%m%d_%H%M%S)
cp backend/data/survey.db "backups/survey.db.$DATE"
# 保留最近10个备份
ls -t backups/survey.db.* | tail -n +11 | xargs rm -f
echo "备份完成: $DATE"如果误删了数据库文件,尝试从git恢复:
# 查看最新提交的数据库文件
git log --oneline -- backend/data/survey.db
# 恢复到指定版本
git checkout <commit_id> -- backend/data/survey.db# SQLite 数据库修复
sqlite3 backend/data/survey.db ".dump" > backup.sql
sqlite3 new.db < backup.sql
mv new.db backend/data/survey.db如遇数据库问题,请:
- 立即停止操作,避免进一步损坏
- 备份当前数据库文件
- 联系技术支持