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