新版本的 RainMail 增加了更多功能字段,导致旧数据库 rainmail2.db 的表结构不兼容。本迁移工具可将旧数据迁移到新数据库 rainmail.db。
| 旧字段 | 新字段 | 默认值 |
|---|---|---|
| - | sender_id | NULL |
| - | delivery_type | 'public' |
| - | delivery_options | NULL |
| - | reply_notification | 'none' |
| - | is_anonymous | 1 (True) |
| - | reply_to_id | NULL |
| - | hugs_count | 0 |
在服务器上拉取最新代码后,运行:
./deploy.sh脚本会自动:
- 备份现有的 rainmail.db(如果存在)
- 将 rainmail2.db 的数据迁移到 rainmail.db
- 提示如何启动服务
# 1. 激活虚拟环境
source venv/bin/activate
# 2. 运行迁移脚本
python3 migrate_db.py
# 3. 确认迁移提示,输入 y如果 Python 环境不可用,可以使用 sqlite3 命令:
# 备份新数据库
cp instance/rainmail.db instance/rainmail.db.backup
# 迁移 message 表
sqlite3 instance/rainmail2.db <<EOF | sqlite3 instance/rainmail.db
.mode insert message
SELECT * FROM message;
EOF
# 注意:手动 SQL 迁移需要处理新字段的默认值迁移完成后,检查数据:
sqlite3 instance/rainmail.db "SELECT COUNT(*) FROM message;"
sqlite3 instance/rainmail.db "SELECT COUNT(*) FROM user;"如果迁移出现问题,可以恢复备份:
cp instance/rainmail.db.backup instance/rainmail.db- 迁移脚本会跳过已存在的记录(通过 ID 判断),可以安全地重复运行
- 旧数据库
rainmail2.db不会被修改 - 建议在部署前先在测试环境验证迁移