数据库远程同步功能

概述

db-sync 命令提供了通过 WebDAV 协议与坚果云(或其他兼容 WebDAV 的云存储服务)同步 CertFlow 数据库文件的能力。该功能支持本地数据库推送到远程、从远程拉取到本地,以及查看远程同步状态。

安装要求

新增依赖:

  • requests>=2.28

安装更新:

pip install -e .

配置

config.yaml 中添加以下配置:

sync:
  webdav:
    url: "https://dav.jianguoyun.com/dav/"
    username: "your@email.com"
    password: "your_app_password"  # 坚果云需使用第三方应用密码
    remote_path: "/CertFlow/certflow.db"

配置说明

配置项

说明

url

WebDAV 服务地址(必填)

username

用户名/邮箱

password

密码(坚果云需要第三方应用密码)

remote_path

远程存储路径,默认为 /certflow.db

获取坚果云配置

  1. 登录坚果云官网

  2. 进入「账户信息」→「安全选项」

  3. 添加应用,生成第三方应用密码

  4. WebDAV 地址为:https://dav.jianguoyun.com/dav/

使用方法

命令格式

certflow db-sync [ACTION] [OPTIONS]

可用操作

操作

说明

status

查看本地和远程数据库的状态信息

push

将本地数据库推送到远程(推送前自动备份本地)

pull

从远程拉取数据库到本地(拉取前自动备份本地)

选项

选项

说明

-y, --yes

跳过确认提示,直接执行操作

使用示例

查看状态

certflow db-sync status

输出示例:

📁 本地: /path/to/certflow.db
   大小: 2.35 MB
🌐 远程: https://dav.jianguoyun.com/dav//CertFlow/certflow.db
   状态: 已存在

推送到远程

# 交互式确认
certflow db-sync push

# 跳过确认
certflow db-sync push -y

执行过程:

  1. 自动创建本地备份(命名格式:certflow.backup_pre_push_20240101_120000.db

  2. 将当前数据库上传到远程

  3. 显示上传结果

从远程拉取

# 交互式确认
certflow db-sync pull

# 跳过确认
certflow db-sync pull -y

执行过程:

  1. 如果本地数据库存在,自动创建备份

  2. 从远程下载数据库文件

  3. 覆盖本地数据库

  4. 显示下载结果

安全特性

自动备份

在执行 pushpull 操作前,系统会自动备份当前的本地数据库:

  • 备份文件命名格式:{原文件名}.backup_{标签}_{时间戳}.db

  • 标签:pre_pushpre_pull

  • 时间戳:YYYYMMDD_HHMMSS

示例:certflow.backup_pre_push_20240115_143022.db

确认提示

默认情况下,pushpull 操作会显示确认提示,防止误操作。使用 -y--yes 选项可以跳过确认。

错误处理

错误情况

处理方式

未配置 sync.webdav.url

提示配置缺失,退出命令

本地数据库不存在(push)

提示错误,退出操作

远程文件不存在(pull)

提示错误,退出操作

网络连接失败

显示警告信息,继续执行

HTTP 请求失败

显示状态码和错误信息

注意事项

  1. 网络要求:需要能够访问配置的 WebDAV 服务器

  2. 权限要求:确保本地数据库目录有读写权限

  3. 并发问题:同步操作不支持并发,请避免同时执行多个同步命令

  4. 数据安全:建议在同步前确认当前数据库状态,避免意外的覆盖操作

  5. 密码安全:坚果云需要使用第三方应用密码,而非登录密码

应用场景

场景一:多设备数据同步

在多台电脑上使用 CertFlow 时,可以通过坚果云保持数据库同步:

# 设备 A:下班前推送
certflow db-sync push

# 设备 B:上班前拉取
certflow db-sync pull

场景二:数据备份

定期将数据库推送到云存储,实现自动备份:

# 可配合 cron 或计划任务使用
certflow db-sync push -y

场景三:环境迁移

将数据从一台机器迁移到另一台:

# 源机器:推送
certflow db-sync push -y

# 目标机器:拉取
certflow db-sync pull -y

故障排查

问题:连接失败

  • 检查网络连接

  • 确认 WebDAV 地址正确

  • 验证用户名和密码

问题:认证失败(坚果云)

  • 确认使用的是第三方应用密码,而非登录密码

  • 重新生成应用密码并更新配置

问题:远程文件不存在

  • 首先执行 push 操作上传文件

  • 检查 remote_path 配置是否正确

问题:权限被拒绝

  • 检查本地数据库目录的写入权限

  • 确认 WebDAV 服务器有写入权限

相关命令

  • certflow db-backup - 本地数据库备份

  • certflow check-consistency - 数据库一致性检查

  • certflow clean-duplicates - 清理重复数据

版本历史

  • 新增于:2024

  • 依赖要求:requests >= 2.28