#!/bin/bash # NAS 端:小表全量同步(constituent_unified / bs_adjust_factor 等)。 # # 这些表无 id 增量键、行数万级、变化不频繁(成份股月度调整 / 除权日), # 全量 dump + replace 最简,每天跑也只需几秒。 # # 用法: bash sync_tables.sh # 设计同 sync_dbbardata.sh: VPS python(stdin 喂) 导出 sqlite → scp → NAS 全量替换。 # 幂等: merge 端 DROP+CREATE+INSERT,重跑安全。 set -eu KEY=/var/services/homes/admin/.ssh/id_ed25519_nas VPS=Administrator@49.232.102.198 VPS_DB='C:\sanguo_vnpy_v2\data\quant_trading.db' VPS_OUT='C:\sanguo_vnpy_v2\data\_sync_tbl.db' VPS_OUT_SCP='C:/sanguo_vnpy_v2/data/_sync_tbl.db' VPS_PY='C:\Python310\python.exe -X utf8 -' ROOT=/volume1/stock/sanguo_vnpy_v2 EXP=$ROOT/scripts/nas_sync/export_table.py MERGE=$ROOT/scripts/nas_sync/merge_table.py DB=$ROOT/data_backup/quant_trading.db STAGE=$ROOT/data_backup/_staging LOG=$ROOT/data_backup/sync_tables.log # 要全量同步的小表清单(merge_table.py 需登记 schema) TABLES=(constituent_unified bs_adjust_factor) mkdir -p "$STAGE" echo "=== $(date '+%F %T') tables sync start ===" >> "$LOG" for T in "${TABLES[@]}"; do echo "[$(date '+%T')] export $T ..." >> "$LOG" ssh -i "$KEY" -o StrictHostKeyChecking=no "$VPS" \ "$VPS_PY --db $VPS_DB --out $VPS_OUT --table $T" < "$EXP" >> "$LOG" 2>&1 scp -i "$KEY" -o StrictHostKeyChecking=no "$VPS:$VPS_OUT_SCP" "$STAGE/tbl.db" >> "$LOG" 2>&1 python3 "$MERGE" --db "$DB" --inc "$STAGE/tbl.db" --table "$T" >> "$LOG" 2>&1 rm -f "$STAGE/tbl.db" echo "[$(date '+%T')] $T done" >> "$LOG" done echo "=== $(date '+%F %T') TABLES SYNC DONE ===" >> "$LOG"