From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 docker/postgres/migration/backup.sh |   79 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 79 insertions(+), 0 deletions(-)

diff --git a/docker/postgres/migration/backup.sh b/docker/postgres/migration/backup.sh
new file mode 100644
index 0000000..84587e9
--- /dev/null
+++ b/docker/postgres/migration/backup.sh
@@ -0,0 +1,79 @@
+#!/usr/bin/env bash
+# 鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+# JNPF PostgreSQL 瀹氭椂澶囦唤
+#   - docker exec pg_dump 閫愬簱瀵煎嚭锛坈ustom 鏍煎紡 -Fc锛屽凡鍘嬬缉銆佸彲 pg_restore 閫夋嫨鎬ц繕鍘燂級
+#   - 澶囦唤浜х墿钀� volume 澶栫殑瀹夸富鐩綍锛圔ACKUP_DIR锛夛紝瀹瑰櫒/鍗锋崯鍧忎篃涓嶄涪
+#   - 姣忎唤瀵煎嚭鐢� pg_restore -l 鏍¢獙鍙鎬�
+#   - 淇濈暀鏈�杩� RETENTION_DAYS 澶╋紝鏇存棭鐨勮嚜鍔ㄥ垹闄�
+#
+# 鐢ㄦ硶锛�
+#   ./backup.sh                     # 澶囦唤鍏ㄩ儴涓夊簱
+#   DATABASES="jnpf_init" ./backup.sh
+#
+# 鍙傛暟锛堢幆澧冨彉閲忥級锛�
+#   CONTAINER        PG 瀹瑰櫒鍚�        榛樿 cx-pg-customer1锛�2026-08-08 瀹㈡埛A鏀瑰悕锛屼氦浠樼幆澧冪敤鏃舵樉寮忎紶 CONTAINER=cx-postgres锛�
+#   PGUSER           瓒呯骇鐢ㄦ埛         榛樿 postgres
+#   DATABASES        寰呭浠藉簱(绌烘牸鍒嗛殧) 榛樿 "jnpf_init jnpf_flow jnpf_xxljob nacos_config"
+#   BACKUP_DIR       瀹夸富澶囦唤鐩綍     榛樿 /data/pg-backup锛堝姟蹇呭湪 volume 澶栵級
+#   RETENTION_DAYS   淇濈暀澶╂暟         榛樿 14
+#
+# 鈹�鈹� cron 瀹氭椂锛堢幇鍦� crontab -e锛屾瘡澶� 02:00锛夆攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+#   0 2 * * * /opt/jnpf/offline/migration/backup.sh >> /var/log/jnpf-pg-backup.log 2>&1
+#   娉ㄦ剰锛氬涓绘枃浠跺瓨鍌紙.env JNPF_DATA_DIR 涓� jnpf-resources/锛屼笂浼犻檮浠舵墍鍦級涓嶅湪 PG 閲岋紝
+#   闇�鍙﹁绾冲叆鏂囦欢绾у浠斤紙rsync/tar 鍧囧彲锛�
+#   杩樺師绀轰緥锛�
+#     gunzip -c jnpf_init_YYYYMMDD_HHMMSS.dump.gz > /tmp/x.dump   # 鑻ュ凡 gzip
+#     docker exec -i cx-pg-customer1 pg_restore -U postgres -d jnpf_init --clean --if-exists < /tmp/x.dump
+#   锛�-Fc 鑷韩宸插帇缂╋紝鏈剼鏈笉鍐嶉澶� gzip锛涗笅鏂� .dump 鍙洿鎺� pg_restore锛�
+# 鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+set -euo pipefail
+
+CONTAINER="${CONTAINER:-cx-pg-customer1}"
+PGUSER="${PGUSER:-postgres}"
+# nacos_config 涓�骞跺浠斤紙閰嶇疆涓績鍐呭鍙瓨 PG锛宑odex review 2026-07-17 琛ワ級
+DATABASES="${DATABASES:-jnpf_init jnpf_flow jnpf_xxljob nacos_config}"
+# Windows/Git Bash 鎶ゆ爮锛氶粯璁� /data/pg-backup 浼氭槧灏勮繘 Git 瀹夎鐩綍锛堥潤榛樺浠藉埌閿欒浣嶇疆锛夛紝
+# 鏁� MSYS 鐜蹇呴』鏄惧紡浼� BACKUP_DIR锛堝 /d/pg-backup锛�
+case "$(uname -s)" in
+  MINGW*|MSYS*) [ -n "${BACKUP_DIR:-}" ] || {
+    printf '\033[1;31m[backup][err]\033[0m %s\n' \
+      "Windows/Git Bash 涓嬪繀椤绘樉寮忔寚瀹� BACKUP_DIR锛屽锛欱ACKUP_DIR=/d/pg-backup $0" >&2
+    exit 1
+  } ;;
+esac
+BACKUP_DIR="${BACKUP_DIR:-/data/pg-backup}"
+RETENTION_DAYS="${RETENTION_DAYS:-14}"
+TS="$(date +%Y%m%d_%H%M%S)"
+
+log()  { printf '\033[1;34m[backup]\033[0m %s\n' "$*"; }
+warn() { printf '\033[1;33m[backup][warn]\033[0m %s\n' "$*"; }
+die()  { printf '\033[1;31m[backup][err]\033[0m %s\n' "$*" >&2; exit 1; }
+
+docker inspect "$CONTAINER" >/dev/null 2>&1 || die "瀹瑰櫒 $CONTAINER 涓嶅湪"
+mkdir -p "$BACKUP_DIR"
+
+fail=0
+for db in $DATABASES; do
+  out="$BACKUP_DIR/${db}_${TS}.dump"
+  log "pg_dump ${db} 鈫� $(basename "$out")"
+  # -Fc custom 鏍煎紡锛涘け璐ュ垯鍒犳畫缂烘枃浠跺苟璁″叆澶辫触
+  if docker exec "$CONTAINER" pg_dump -U "$PGUSER" -Fc -d "$db" > "$out" 2>/dev/null; then
+    # 鏍¢獙锛歱g_restore -l 鑳藉垪鍑虹洰褰曞嵆瑙嗕负鍙
+    if docker exec -i "$CONTAINER" pg_restore -l < "$out" >/dev/null 2>&1; then
+      log "  鉁� ${db}  $(du -h "$out" | cut -f1)  鏍¢獙閫氳繃"
+    else
+      warn "  鉁� ${db} 瀵煎嚭鏂囦欢 pg_restore -l 鏍¢獙澶辫触"; fail=$((fail+1))
+    fi
+  else
+    warn "  鉁� ${db} pg_dump 澶辫触"; rm -f "$out"; fail=$((fail+1))
+  fi
+done
+
+log "娓呯悊 ${RETENTION_DAYS} 澶╁墠鐨勬棫澶囦唤 鈥�"
+find "$BACKUP_DIR" -maxdepth 1 -name '*.dump' -type f -mtime "+${RETENTION_DAYS}" -print -delete | while read -r f; do
+  log "  鍒犻櫎 $(basename "$f")"
+done
+
+log "褰撳墠澶囦唤鐩綍鍗犵敤锛�$(du -sh "$BACKUP_DIR" 2>/dev/null | cut -f1)"
+[ "$fail" = 0 ] || die "鏈� ${fail} 涓簱澶囦唤澶辫触锛屾鏌ユ棩蹇�"
+log "澶囦唤瀹屾垚 鉁擄紙${BACKUP_DIR}锛�"

--
Gitblit v1.8.0