4.3 KiB
4.3 KiB
数据迁移执行指南
⚠️ 重要提示
日志中显示格式转换警告,说明数据库中还有旧数据(百分比形式,如30表示30%)。需要执行数据迁移脚本,将数据统一转换为比例形式(0.30表示30%)。
🔧 执行步骤
步骤1:备份数据库(强烈推荐)
# 备份数据库
mysqldump -u username -p database_name > backup_$(date +%Y%m%d_%H%M%S).sql
步骤2:执行数据迁移脚本
# 执行SQL迁移脚本
mysql -u username -p database_name < backend/database/migrate_percent_configs_to_ratio.sql
或者直接在MySQL客户端执行:
-- 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:验证迁移结果
-- 检查是否还有>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缓存
# 清除Redis缓存,让系统重新加载配置
redis-cli DEL "config:trading_config:*"
redis-cli DEL "config:global_strategy_config:*"
步骤5:重启服务
# 重启后端服务
supervisorctl restart backend
# 重启交易进程
supervisorctl restart auto_sys_acc1 auto_sys_acc2 auto_sys_acc3 auto_sys_acc4
✅ 验证
检查日志
迁移完成后,日志中不应该再出现格式转换警告:
# 查看日志,确认没有格式转换警告
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的值
- 清除缓存:迁移后清除Redis缓存
- 重启服务:迁移后重启服务,让新配置生效
🎯 迁移后的效果
- ✅ 数据库中统一存储比例形式(0.30)
- ✅ 前端直接显示小数(0.30),不带%符号
- ✅ 后端直接使用(0.30),不需要转换
- ✅ 日志中不再出现格式转换警告