db-sync 0.1.0

A secure and stable database backup synchronization system with automatic file transfer and verification
# DB-Sync 数据库备份同步系统


一个安全稳定的数据库备份文件同步系统,支持多系统备份文件的自动同步和验证。

## 系统架构


- **服务端 (db-sync-server)**: 接收和存储备份文件,提供API接口
- **客户端 (db-sync-client)**: 定期检查和上传备份文件

## 功能特性


### 安全特性

- JWT令牌认证
- MD5文件完整性校验
- 文件大小验证
- 安全的HTTP传输

### 稳定性特性

- 自动重试机制
- 错误恢复
- 日志记录
- 健康检查

### 同步策略

- **月度上传**: 每月20号自动上传所有备份文件
- **每日验证**: 每月20-26号验证文件完整性
- **增量同步**: 只上传变更的文件

## 快速开始


### 1. 配置服务端


编辑 `server.config.json`:

```json
{
  "listen_addr": "0.0.0.0:3030",
  "data": [
    {
      "system_name": "系统名称",
      "system_ip": "192.168.1.100",
      "backup_dir": "./backups/系统名称",
      "auth_token": "your-secret-token-here"
    }
  ]
}
```

### 2. 配置客户端


编辑 `client.config.json`:

```json
{
  "data": [
    {
      "system_name": "系统名称",
      "system_ip": "192.168.1.100",
      "backup_server_url": "http://server-ip:3030",
      "auth_token": "your-secret-token-here",
      "local_backup_dir": "./local/backups"
    }
  ]
}
```

### 3. 构建项目


```bash
cargo build --release
```

### 4. 生成认证令牌


使用内置的 CLI 工具为每个系统生成 512 位认证令牌:

#### 为单个系统生成令牌


```bash
cargo run --bin gen-auth-token generate --system-ip 192.168.1.100 --system-name "HR System"
```

输出示例:
```
=== DB-Sync 认证令牌生成 ===
系统 IP: 192.168.1.100
系统名称: HR System
令牌长度: 512 位
生成的令牌: 1154e194e0668a3a37ce63a28c6fe72e0200b937fb1ebb6bbf80345a8bee00c6a612fe10dac35b7781f89a13116c3cf81941c316529b0e89b2ee8ebbf3ac4846
```

#### 批量生成令牌


1. 首先创建配置文件 `batch_config.json`
```json
{
  "secret_key": "your_custom_secret_key",
  "systems": [
    {
      "system_ip": "192.168.1.100",
      "system_name": "HR System"
    },
    {
      "system_ip": "192.168.1.101",
      "system_name": "Asset Management System"
    }
  ]
}
```

2. 然后运行批量生成命令:

```bash
cargo run --bin gen-auth-token batch --config-file batch_config.json --format json
```

#### 验证令牌格式


```bash
cargo run --bin gen-auth-token validate --token "your_token_here"
```

#### 查看所有可用命令


```bash
cargo run --bin gen-auth-token -- --help
```

#### 生成示例配置


```bash
cargo run --bin gen-auth-token example
```

### 5. 运行系统


#### 启动服务端

```bash
cargo run --bin db-sync-server
```

#### 启动客户端

```bash
cargo run --bin db-sync-client
```

### 6. 测试系统


运行测试脚本:
```bash
# Windows

test_system.bat

# Linux/Mac

bash test_system.sh
```

## API接口


### 健康检查

```
GET /health
```

### 文件上传

```
POST /api/upload
Headers:
- authorization: Bearer <token>

Query Parameters:
- system_ip: 系统IP
- filename: 文件名
- blake3: 文件blake3
- size: 文件大小

Body: 文件二进制数据
```

### blake3查询

```
POST /api/blake3
Headers:
- authorization: Bearer <token>

Query Parameters:
- system_ip: 系统IP
- filename: 文件名
```

## 文件结构

```
db-sync/
├── src/
│   ├── db-sync-server.rs    # 服务端代码
│   └── db-sync-client.rs    # 客户端代码
├── server.config.json       # 服务端配置
├── client.config.json       # 客户端配置
├── test_data/              # 测试数据
├── test_system.bat         # Windows测试脚本
├── test_system.sh          # Linux/Mac测试脚本
└── README.md               # 说明文档
```

## 安全建议

1. **令牌管理**: 使用强密码作为auth_token,定期更换
2. **网络安全**: 在生产环境中使用HTTPS
3. **访问控制**: 限制API访问的IP地址
4. **备份加密**: 对敏感备份文件进行加密

## 监控和维护

### 日志查看
系统使用结构化日志,可通过环境变量控制日志级别:

```bash
export RUST_LOG=info
cargo run --bin db-sync-server
```

### 健康检查

定期检查服务状态:
```bash
curl http://server-ip:3030/health
```

### 文件验证

手动验证文件完整性:
```bash
# 计算本地文件blake3校验值

blake3 backup_file.sql

# 查询服务器文件blake3校验值

curl -X POST http://server-ip:3030/api/blake3 \
  -H "authorization: Bearer <token>" \
  -d "system_ip=192.168.1.100&filename=backup_file.sql"
```

## 故障排除


### 常见问题


1. **连接失败**: 检查网络连接和防火墙设置
2. **认证失败**: 验证auth_token配置是否正确
3. **文件校验失败**: 检查文件传输过程中的完整性
4. **磁盘空间不足**: 定期清理旧的备份文件

### 调试模式


启用详细日志:
```bash
export RUST_LOG=debug
cargo run --bin db-sync-server
```

## 许可证


本项目采用MIT许可证。

## Crates.io 信息


**包名**: `db-sync`  
**版本**: `0.1.0`  
**Rust 版本要求**: `1.70+`  
**许可证**: `MIT`  
**关键词**: `backup`, `sync`, `database`, `file-transfer`, `security`

## 发布说明


此包已准备好发布到 [crates.io](https://crates.io/),提供企业级的数据库备份同步解决方案。

### 功能特性

- 🔐 安全的令牌认证机制
- 📁 文件完整性校验 (blake3)
- ⏰ 定时任务调度
- 🔄 自动重试和错误恢复
- 📊 详细的日志记录和监控

### 适用场景

- 企业数据库备份
- 多系统文件同步
- 定时数据备份任务
- 安全的文件传输

## 贡献


欢迎提交 Issue 和 Pull Request 来改进这个项目。

## 更新日志


### v0.1.0

- 初始版本发布
- 实现基本的客户端-服务器架构
- 支持文件上传和blake3校验
- 添加定时任务调度功能
- 完善的错误处理和日志记录