Files
g0v0-server/DATA_SYNC_GUIDE.md
2025-07-28 13:09:55 +00:00

141 lines
3.6 KiB
Markdown

# Lazer API 数据同步指南
本指南将帮助您将现有的 bancho.py 数据库数据同步到新的 Lazer API 专用表中。
## 文件说明
1. **`migrations_old/add_missing_fields.sql`** - 创建 Lazer API 专用表结构
2. **`migrations_old/sync_legacy_data.sql`** - 数据同步脚本
3. **`sync_data.py`** - 交互式数据同步工具
4. **`quick_sync.py`** - 快速同步脚本(使用项目配置)
## 使用方法
### 方法一:快速同步(推荐)
如果您已经配置好了项目的数据库连接,可以直接使用快速同步脚本:
```bash
python quick_sync.py
```
此脚本会:
1. 自动读取项目配置中的数据库连接信息
2. 创建 Lazer API 专用表结构
3. 同步现有数据到新表
### 方法二:交互式同步
如果需要使用不同的数据库连接配置:
```bash
python sync_data.py
```
此脚本会:
1. 交互式地询问数据库连接信息
2. 检查必要表是否存在
3. 显示详细的同步过程和结果
### 方法三:手动执行 SQL
如果您熟悉 SQL 操作,可以手动执行:
```bash
# 1. 创建表结构
mysql -u username -p database_name < migrations_old/add_missing_fields.sql
# 2. 同步数据
mysql -u username -p database_name < migrations_old/sync_legacy_data.sql
```
## 同步内容
### 创建的新表
- `lazer_user_profiles` - 用户扩展资料
- `lazer_user_countries` - 用户国家信息
- `lazer_user_kudosu` - 用户 Kudosu 统计
- `lazer_user_counts` - 用户各项计数统计
- `lazer_user_statistics` - 用户游戏统计(按模式)
- `lazer_user_achievements` - 用户成就
- `lazer_oauth_tokens` - OAuth 访问令牌
- 其他相关表...
### 同步的数据
1. **用户基本信息**
-`users` 表同步基本资料
- 自动转换时间戳格式
- 设置合理的默认值
2. **游戏统计**
-`stats` 表同步各模式的游戏数据
- 计算命中精度和其他衍生统计
3. **用户成就**
-`user_achievements` 表同步成就数据(如果存在)
## 注意事项
1. **安全性**
- 脚本只会创建新表和插入数据
- 不会修改或删除现有的原始表数据
- 使用 `ON DUPLICATE KEY UPDATE` 避免重复插入
2. **兼容性**
- 兼容现有的 bancho.py 数据库结构
- 支持标准的 osu! 数据格式
3. **性能**
- 大量数据可能需要较长时间
- 建议在维护窗口期间执行
## 故障排除
### 常见错误
1. **"Unknown column" 错误**
```
ERROR 1054: Unknown column 'users.is_active' in 'field list'
```
**解决方案**: 确保先执行了 `add_missing_fields.sql` 创建表结构
2. **"Table doesn't exist" 错误**
```
ERROR 1146: Table 'database.users' doesn't exist
```
**解决方案**: 确认数据库中存在 bancho.py 的原始表
3. **连接错误**
```
ERROR 2003: Can't connect to MySQL server
```
**解决方案**: 检查数据库连接配置和权限
### 验证同步结果
同步完成后,可以执行以下查询验证结果:
```sql
-- 检查同步的用户数量
SELECT COUNT(*) FROM lazer_user_profiles;
-- 查看样本数据
SELECT
u.id, u.name,
lup.playmode, lup.is_supporter,
lus.pp, lus.play_count
FROM users u
LEFT JOIN lazer_user_profiles lup ON u.id = lup.user_id
LEFT JOIN lazer_user_statistics lus ON u.id = lus.user_id AND lus.mode = 'osu'
LIMIT 5;
```
## 支持
如果遇到问题,请:
1. 检查日志文件 `data_sync.log`
2. 确认数据库权限
3. 验证原始表数据完整性