Skip to content

WodenJay/DataBase

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

数据库同步系统 (DB Sync System)

一个基于Python的多数据库同步系统,支持MySQL、PostgreSQL和SQLite之间的数据同步,具备实时冲突检测、Web管理界面和邮件告警功能。

🎯 项目概述

本项目是一个完整的数据库课程作业,实现了一个企业级的多数据库同步系统。系统通过Web界面提供直观的管理功能,支持多种同步策略,并展示了高级数据库概念的实际应用。

核心价值

  • 多数据库支持: 统一管理MySQL、PostgreSQL、SQLite三种数据库
  • 智能同步: 支持全量和增量两种同步模式
  • 冲突管理: 自动检测数据冲突并提供多种解决方案
  • 实时监控: Web界面实时展示同步状态和系统健康度
  • 企业级特性: 用户认证、权限控制、邮件告警、定时任务

🏗️ 系统架构

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   Web Frontend  │    │   Python API    │    │   Database      │
│   (NiceGUI)     │◄──►│   Backend       │◄──►│   Layer         │
│                 │    │                 │    │                 │
│ - 用户界面       │    │ - 同步逻辑       │    │ - MySQL         │
│ - 数据展示       │    │ - 冲突检测       │    │ - PostgreSQL    │
│ - 操作控制       │    │ - 邮件服务       │    │ - SQLite        │
└─────────────────┘    └─────────────────┘    └─────────────────┘
         │                       │                       │
         │              ┌─────────────────┐              │
         │              │   Scheduler     │              │
         └─────────────►│   (APScheduler) │◄─────────────┘
                        │                 │
                        │ - 定时任务       │
                        │ - 实时轮询       │
                        └─────────────────┘

✨ 功能特性

🔄 数据同步功能

  • 全量同步: 完整复制源表数据到目标表
  • 增量同步: 基于Change_Log实现实时数据变更同步
  • 双向同步: 支持任意两个数据库之间的数据同步
  • 事务安全: 完整的事务处理,确保数据一致性

🚨 冲突管理

  • 自动冲突检测: 基于时间戳的冲突检测机制
  • 冲突记录: 详细记录冲突数据和原因
  • 多种解决方案: 保留源数据/保留目标数据/手动合并
  • 邮件告警: 冲突发生时自动发送邮件通知

🎛️ Web管理界面

  • 仪表盘: 系统状态概览和同步统计
  • 同步任务管理: 创建、编辑、执行同步任务
  • 冲突处理: 可视化冲突数据和解决方案
  • 用户管理: 基于角色的访问控制
  • 实时监控: 实时查看同步日志和系统状态

⏰ 调度与监控

  • 定时同步: 基于Cron表达式的定时任务
  • 实时同步: 3秒间隔的变更检测
  • 同步日志: 详细的操作记录和错误追踪
  • 性能监控: 同步耗时和成功率统计

🔒 安全特性

  • 用户认证: bcrypt加密的密码存储
  • 角色权限: 管理员和普通用户权限分离
  • 数据库权限: 只读用户权限控制演示
  • 会话管理: 安全的会话处理机制

🛠️ 技术栈

后端技术

  • Python 3.10: 主要开发语言
  • NiceGUI 2.0+: Web界面框架
  • APScheduler 3.10+: 任务调度
  • bcrypt: 密码加密
  • PyYAML: 配置文件处理

数据库连接

  • PyMySQL: MySQL数据库连接
  • psycopg2-binary: PostgreSQL数据库连接
  • sqlite3: SQLite数据库连接

容器化

  • Docker: 应用容器化
  • Docker Compose: 多服务编排
  • MySQL 8.0: 主数据库服务
  • PostgreSQL 13: 辅助数据库服务

邮件服务

  • SMTP: 邮件发送协议
  • email-validator: 邮件地址验证

🚀 快速开始

1. 克隆项目

git clone https://github.com/WodenJay/DataBase.git
cd database_project

2. 启动项目

# 运行脚本
bash run.sh

# 然后输入你的qq授权码,回车

4. 访问系统

5. 验证部署

# 检查所有容器状态
docker compose ps

# 查看应用日志确认无错误
docker compose logs web_app

# 测试数据库连接
docker compose exec web_app python -c "from db_client import init_connections; init_connections(); print('数据库连接成功')"

📖 使用指南

登录系统

  1. 打开浏览器访问 http://localhost:8080
  2. 使用管理员账户登录:admin / admin123
  3. 首次登录将看到系统仪表盘

主要功能页面

🏠 仪表盘 (/)

  • 显示当前用户信息和角色
  • 系统状态概览
  • 快速访问各个功能模块

🔄 同步任务 (/sync)

  • 查看所有同步任务配置
  • 手动执行同步任务
  • 编辑同步任务设置
  • 查看同步历史日志

⚠️ 冲突处理 (/conflict)

  • 查看所有数据冲突记录
  • 选择冲突解决方案
  • 批量处理冲突
  • 查看冲突详情

📊 查询演示 (/query-demo)

  • 性能优化对比演示
  • 索引效果展示
  • 视图vs原始查询对比

⚙️ 系统管理 (/admin)

  • 数据库安全演示
  • 用户权限管理
  • 系统配置管理

🗄️ 数据库设计

核心业务表

  • Users: 用户信息表
  • Products: 产品信息表
  • Orders: 订单信息表
  • Order_Items: 订单明细表
  • Inventory: 库存信息表

系统管理表

  • Sync_Config: 同步任务配置表
  • Sync_Logs: 同步执行日志表
  • Conflict_Records: 冲突记录表
  • Change_Log: 数据变更日志表
  • email_tokens: 邮件访问令牌表

⚙️ 配置说明

配置文件 (config.yaml)

# 数据库连接配置
databases:
  mysql:
    host: db_mysql
    port: 3306
    username: root
    password: rootpassword
    database: my_db
  postgresql:
    host: db_pg
    port: 5432
    username: postgres
    password: postgrespassword
    database: my_db
  sqlite:
    database: /app/local.db

# 邮件服务配置
email:
  smtp_server: smtp.qq.com
  smtp_port: 465
  sender_email: your_email@qq.com
  admin_emails:
    - admin@example.com

# 同步配置
sync:
  polling_interval: 3  # 实时同步轮询间隔(秒)
  batch_size: 1000     # 批量同步大小
  max_retry: 3         # 最大重试次数
  timeout: 30          # 同步超时时间(秒)

# 安全配置
security:
  session_secret: "your_secret_key"
  token_expiry_hours: 24  # 邮件访问令牌有效期(小时)

同步任务配置示例

系统预设了三个同步任务配置:

  1. MySQL → PostgreSQL: Users表全量同步(每日0点执行)
  2. MySQL → PostgreSQL: Products表增量同步(每30分钟执行)
  3. SQLite → MySQL: Orders表全量同步(每日凌晨1点执行)

👨‍💻 开发指南

项目结构

database_project/
├── backend/                    # 后端代码
│   ├── main.py                # 主应用入口
│   ├── db_client.py           # 数据库连接管理
│   ├── sync_core.py           # 同步核心逻辑
│   ├── scheduler.py           # 任务调度器
│   ├── email_service.py       # 邮件服务
│   ├── real_time_sync.py      # 实时同步管理
│   ├── auth_decorators.py     # 认证装饰器
│   ├── utils.py               # 工具函数
│   ├── ui/                    # Web界面
│   │   ├── layout.py          # 页面布局
│   │   ├── login_page.py      # 登录页面
│   │   ├── dashboard_page.py  # 仪表盘页面
│   │   ├── sync_page.py       # 同步管理页面
│   │   ├── conflict_page.py   # 冲突处理页面
│   │   ├── admin_page.py      # 系统管理页面
│   │   ├── query_demo_page.py # 查询演示页面
│   │   └── mobile_pages.py   # 移动端页面
│   ├── Dockerfile             # Docker构建文件
│   └── requirements.txt       # Python依赖
├── db/                        # 数据库初始化脚本
│   ├── init_mysql.sql         # MySQL初始化
│   ├── init_pg.sql           # PostgreSQL初始化
│   └── init_sqlite.sql       # SQLite初始化
├── docker-compose.yml          # Docker编排文件
├── config.yaml                # 配置文件
├── run.sh                    # 启动脚本
└── README.md                 # 项目文档

核心模块说明

db_client.py - 数据库连接管理

  • 统一的数据库连接接口
  • 连接池管理
  • 事务处理
  • 错误处理和重试机制

sync_core.py - 同步核心逻辑

  • 全量同步实现
  • 增量同步实现
  • 冲突检测算法
  • 批量数据处理

scheduler.py - 任务调度

  • APScheduler集成
  • Cron表达式支持
  • 任务状态管理
  • 错误恢复机制

添加新的同步任务

  1. 在数据库中添加Sync_Config记录
  2. 在Web界面中配置同步参数
  3. 可选:添加自定义同步逻辑

自定义冲突解决策略

  1. 修改detect_conflict函数
  2. 实现新的冲突检测算法
  3. conflict_page.py中添加对应的UI处理

🔧 故障排除

常见问题

1. 容器启动失败

# 检查Docker服务状态
docker --version
docker compose version

# 查看详细错误日志
docker compose logs web_app
docker compose logs db_mysql
docker compose logs db_pg

# 重新构建容器
docker compose down
docker compose up --build -d

2. 数据库连接失败

# 检查数据库容器状态
docker compose ps

# 手动测试数据库连接
docker compose exec web_app python -c "
from db_client import init_connections
try:
    init_connections()
    print('数据库连接成功')
except Exception as e:
    print(f'连接失败: {e}')
"

3. 邮件发送失败

  • 检查QQ邮箱授权码是否正确
  • 确认网络连接正常
  • 查看邮件服务配置

4. 同步任务执行失败

# 查看同步日志
docker compose exec web_app python -c "
from db_client import DatabaseType, fetch_data
logs = fetch_data(DatabaseType.MYSQL, 'SELECT * FROM Sync_Logs ORDER BY start_time DESC LIMIT 10')
for log in logs:
    print(f'{log[\"start_time\"]} - {log[\"status\"]} - {log.get(\"error_message\", \"\")}')
"

5. Web界面访问异常

  • 检查端口8080是否被占用
  • 确认防火墙设置
  • 查看应用日志:docker compose logs web_app

About

For my DataBase homework. Just a toy project.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published