一个基于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实现实时数据变更同步
- 双向同步: 支持任意两个数据库之间的数据同步
- 事务安全: 完整的事务处理,确保数据一致性
- 自动冲突检测: 基于时间戳的冲突检测机制
- 冲突记录: 详细记录冲突数据和原因
- 多种解决方案: 保留源数据/保留目标数据/手动合并
- 邮件告警: 冲突发生时自动发送邮件通知
- 仪表盘: 系统状态概览和同步统计
- 同步任务管理: 创建、编辑、执行同步任务
- 冲突处理: 可视化冲突数据和解决方案
- 用户管理: 基于角色的访问控制
- 实时监控: 实时查看同步日志和系统状态
- 定时同步: 基于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: 邮件地址验证
git clone https://github.com/WodenJay/DataBase.git
cd database_project# 运行脚本
bash run.sh
# 然后输入你的qq授权码,回车- Web界面: http://localhost:8080
- 管理员账户: admin / admin123
- 普通用户: user1 / admin123
# 检查所有容器状态
docker compose ps
# 查看应用日志确认无错误
docker compose logs web_app
# 测试数据库连接
docker compose exec web_app python -c "from db_client import init_connections; init_connections(); print('数据库连接成功')"- 打开浏览器访问 http://localhost:8080
- 使用管理员账户登录:
admin/admin123 - 首次登录将看到系统仪表盘
- 显示当前用户信息和角色
- 系统状态概览
- 快速访问各个功能模块
- 查看所有同步任务配置
- 手动执行同步任务
- 编辑同步任务设置
- 查看同步历史日志
- 查看所有数据冲突记录
- 选择冲突解决方案
- 批量处理冲突
- 查看冲突详情
- 性能优化对比演示
- 索引效果展示
- 视图vs原始查询对比
- 数据库安全演示
- 用户权限管理
- 系统配置管理
- Users: 用户信息表
- Products: 产品信息表
- Orders: 订单信息表
- Order_Items: 订单明细表
- Inventory: 库存信息表
- Sync_Config: 同步任务配置表
- Sync_Logs: 同步执行日志表
- Conflict_Records: 冲突记录表
- Change_Log: 数据变更日志表
- email_tokens: 邮件访问令牌表
# 数据库连接配置
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 # 邮件访问令牌有效期(小时)系统预设了三个同步任务配置:
- MySQL → PostgreSQL: Users表全量同步(每日0点执行)
- MySQL → PostgreSQL: Products表增量同步(每30分钟执行)
- 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 # 项目文档
- 统一的数据库连接接口
- 连接池管理
- 事务处理
- 错误处理和重试机制
- 全量同步实现
- 增量同步实现
- 冲突检测算法
- 批量数据处理
- APScheduler集成
- Cron表达式支持
- 任务状态管理
- 错误恢复机制
- 在数据库中添加Sync_Config记录
- 在Web界面中配置同步参数
- 可选:添加自定义同步逻辑
- 修改
detect_conflict函数 - 实现新的冲突检测算法
- 在
conflict_page.py中添加对应的UI处理
# 检查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# 检查数据库容器状态
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}')
"- 检查QQ邮箱授权码是否正确
- 确认网络连接正常
- 查看邮件服务配置
# 查看同步日志
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\", \"\")}')
"- 检查端口8080是否被占用
- 确认防火墙设置
- 查看应用日志:
docker compose logs web_app