auto_trade_sys/docs/数据迁移执行指南.md
薇薇安 9fe028d704 a
2026-01-27 10:36:56 +08:00

176 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 数据迁移执行指南
## ⚠️ 重要提示
日志中显示格式转换警告说明数据库中还有旧数据百分比形式如30表示30%。需要执行数据迁移脚本将数据统一转换为比例形式0.30表示30%)。
---
## 🔧 执行步骤
### 步骤1备份数据库强烈推荐
```bash
# 备份数据库
mysqldump -u username -p database_name > backup_$(date +%Y%m%d_%H%M%S).sql
```
---
### 步骤2执行数据迁移脚本
```bash
# 执行SQL迁移脚本
mysql -u username -p database_name < backend/database/migrate_percent_configs_to_ratio.sql
```
**或者直接在MySQL客户端执行**
```sql
-- 1. 备份表
CREATE TABLE IF NOT EXISTS trading_config_backup_20260126 AS
SELECT * FROM trading_config;
CREATE TABLE IF NOT EXISTS global_strategy_config_backup_20260126 AS
SELECT * FROM global_strategy_config;
-- 2. 迁移 trading_config 表
UPDATE trading_config
SET config_value = CAST(config_value AS DECIMAL(10, 4)) / 100.0
WHERE config_key IN (
'TRAILING_STOP_ACTIVATION',
'TRAILING_STOP_PROTECT',
'MIN_VOLATILITY',
'TAKE_PROFIT_PERCENT',
'STOP_LOSS_PERCENT',
'MIN_STOP_LOSS_PRICE_PCT',
'MIN_TAKE_PROFIT_PRICE_PCT',
'FIXED_RISK_PERCENT',
'MAX_POSITION_PERCENT',
'MAX_TOTAL_POSITION_PERCENT',
'MIN_POSITION_PERCENT'
)
AND config_type = 'number'
AND CAST(config_value AS DECIMAL(10, 4)) > 1;
-- 3. 迁移 global_strategy_config 表
UPDATE global_strategy_config
SET config_value = CAST(config_value AS DECIMAL(10, 4)) / 100.0
WHERE config_key IN (
'TRAILING_STOP_ACTIVATION',
'TRAILING_STOP_PROTECT',
'MIN_VOLATILITY',
'TAKE_PROFIT_PERCENT',
'STOP_LOSS_PERCENT',
'MIN_STOP_LOSS_PRICE_PCT',
'MIN_TAKE_PROFIT_PRICE_PCT',
'FIXED_RISK_PERCENT',
'MAX_POSITION_PERCENT',
'MAX_TOTAL_POSITION_PERCENT',
'MIN_POSITION_PERCENT'
)
AND config_type = 'number'
AND CAST(config_value AS DECIMAL(10, 4)) > 1;
```
---
### 步骤3验证迁移结果
```sql
-- 检查是否还有>1的百分比配置项应该返回0行
SELECT 'trading_config' as table_name, config_key, config_value, account_id
FROM trading_config
WHERE config_key IN (
'TRAILING_STOP_ACTIVATION',
'TRAILING_STOP_PROTECT',
'MIN_VOLATILITY',
'TAKE_PROFIT_PERCENT',
'STOP_LOSS_PERCENT'
)
AND config_type = 'number'
AND CAST(config_value AS DECIMAL(10, 4)) > 1
UNION ALL
SELECT 'global_strategy_config' as table_name, config_key, config_value, NULL as account_id
FROM global_strategy_config
WHERE config_key IN (
'TRAILING_STOP_ACTIVATION',
'TRAILING_STOP_PROTECT',
'MIN_VOLATILITY',
'TAKE_PROFIT_PERCENT',
'STOP_LOSS_PERCENT'
)
AND config_type = 'number'
AND CAST(config_value AS DECIMAL(10, 4)) > 1;
```
**预期结果**应该返回0行没有>1的值
---
### 步骤4清除Redis缓存
```bash
# 清除Redis缓存让系统重新加载配置
redis-cli DEL "config:trading_config:*"
redis-cli DEL "config:global_strategy_config:*"
```
---
### 步骤5重启服务
```bash
# 重启后端服务
supervisorctl restart backend
# 重启交易进程
supervisorctl restart auto_sys_acc1 auto_sys_acc2 auto_sys_acc3 auto_sys_acc4
```
---
## ✅ 验证
### 检查日志
迁移完成后,日志中不应该再出现格式转换警告:
```bash
# 查看日志,确认没有格式转换警告
tail -f /www/wwwroot/autosys_new/logs/trading_*.log | grep "配置值格式转换"
```
**预期结果**:不应该再看到格式转换警告
---
### 检查配置值
**迁移前**
- `TRAILING_STOP_ACTIVATION`: 30百分比形式
- `TRAILING_STOP_PROTECT`: 15百分比形式
- `MIN_VOLATILITY`: 3百分比形式
**迁移后**
- `TRAILING_STOP_ACTIVATION`: 0.30(比例形式)
- `TRAILING_STOP_PROTECT`: 0.15(比例形式)
- `MIN_VOLATILITY`: 0.03(比例形式)
---
## 📝 注意事项
1. **备份数据库**:执行迁移前一定要备份数据库
2. **验证结果**:迁移后验证是否还有>1的值
3. **清除缓存**迁移后清除Redis缓存
4. **重启服务**:迁移后重启服务,让新配置生效
---
## 🎯 迁移后的效果
- ✅ 数据库中统一存储比例形式0.30
- ✅ 前端直接显示小数0.30),不带%符号
- ✅ 后端直接使用0.30),不需要转换
- ✅ 日志中不再出现格式转换警告