# 数据迁移执行指南 ## ⚠️ 重要提示 日志中显示格式转换警告,说明数据库中还有旧数据(百分比形式,如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),不需要转换 - ✅ 日志中不再出现格式转换警告