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/migrate-nacos-config.sh | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 108 insertions(+), 0 deletions(-)
diff --git a/docker/postgres/migration/migrate-nacos-config.sh b/docker/postgres/migration/migrate-nacos-config.sh
new file mode 100644
index 0000000..174c8ac
--- /dev/null
+++ b/docker/postgres/migration/migrate-nacos-config.sh
@@ -0,0 +1,108 @@
+#!/usr/bin/env bash
+# 杩佺Щ nacos_config锛圡ySQL 鈫� PG锛宲gloader 鍏ㄨ嚜鍔ㄩ噸寤虹粨鏋�+鏁版嵁锛夈��
+# migrate-data.sh 鍙鐩� jnpf_init/jnpf_flow锛涙湰鑴氭湰琛� nacos_config锛圢acos 瀛樺偍搴擄級銆�
+# jnpf_xxljob 鏄┖搴擄紙0 琛岋級锛屾棤闇�杩佹暟鎹紝install.sh 寤虹殑绌� schema 鍗冲彲銆�
+#
+# 鐢ㄦ硶锛歋RC_MYSQL_HOST=172.17.0.1 SRC_MYSQL_PWD='***' PG_PASSWORD='***' bash migrate-nacos-config.sh
+# SRC_MYSQL_HOST 婧� MySQL锛堥粯璁� 172.17.0.1 = CVM docker0 缃戝叧鈫抙omework-mysql锛�
+# SRC_MYSQL_PWD 婧� MySQL root 瀵嗙爜锛堝繀濉級
+# PG_PASSWORD 鐩爣 PG postgres 瀵嗙爜锛堝繀濉紱鎴栬 ~/jnpf-pg/.env 鐨� JNPF_PG_PASSWORD锛�
+# CONTAINER PG 瀹瑰櫒鍚嶏紙榛樿 cx-postgres锛�
+set -euo pipefail
+
+# 鈹�鈹� 閫�褰规姢鏍忥紙2026-07-25锛夆攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+# nacos_config 鐨� MySQL鈫扨G 杩佺Щ宸蹭簬 2026-07-21 瀹屾垚锛坈onfig_info 28 / his 105 / tenant 4 涓庢簮涓�鑷达級銆�
+# 鏈剼鏈敤 pgloader 閲嶅缓缁撴瀯+鏁版嵁锛岄噸璺戜細瑕嗙洊 Nacos 瀛樺偍搴� 鈥斺�� 鍗虫姽鎺夐厤缃腑蹇冪殑鐜版湁閰嶇疆銆�
+if [ "${I_KNOW_MIGRATION_IS_RETIRED:-}" != "1" ]; then
+ printf '\033[1;31m[宸查��褰孤锋嫆缁濇墽琛宂\033[0m %s\n' "migrate-nacos-config.sh 宸蹭簬 2026-07-21 瀹屾垚浣垮懡銆�" >&2
+ printf ' 閲嶈窇浼氱敤搴熷純 MySQL 鐨勬棫閰嶇疆瑕嗙洊 CVM 涓婄殑 nacos_config 鈥斺�� 閰嶇疆涓績浼氳鎵撳洖涓冩湀涓棳銆俓n' >&2
+ printf ' 纭渶閲嶈窇璇锋樉寮忓0鏄庯細I_KNOW_MIGRATION_IS_RETIRED=1 %s\n' "$0" >&2
+ exit 1
+fi
+
+SRC_MYSQL_HOST="${SRC_MYSQL_HOST:-172.17.0.1}"
+SRC_MYSQL_PWD="${SRC_MYSQL_PWD:?缂� SRC_MYSQL_PWD}"
+CONTAINER="${CONTAINER:-cx-postgres}"
+PG_PASSWORD="${PG_PASSWORD:-$(grep ^JNPF_PG_PASSWORD "$HOME/jnpf-pg/.env" 2>/dev/null | cut -d= -f2)}"
+[ -n "$PG_PASSWORD" ] || { echo "!! 缂� PG_PASSWORD"; exit 1; }
+MIRROR=cx-nacos-mirror
+PGLOADER_IMAGE="${PGLOADER_IMAGE:-dimitri/pgloader:latest}"
+NET="$(docker inspect -f '{{range $k,$v := .NetworkSettings.Networks}}{{$k}}{{end}}' "$CONTAINER")"
+log(){ printf '\033[1;34m[nacos-mig]\033[0m %s\n' "$*"; }
+
+log "1) mysqldump nacos_config 婧� ${SRC_MYSQL_HOST}"
+docker run --rm mysql:8.0 mysqldump -h"$SRC_MYSQL_HOST" -uroot -p"$SRC_MYSQL_PWD" \
+ --single-transaction --hex-blob --skip-add-locks --set-gtid-purged=OFF nacos_config > /tmp/nacos_dump.sql 2>/dev/null
+log " dump $(wc -l < /tmp/nacos_dump.sql) 琛�"
+
+log "2) 璧蜂复鏃� mirror锛坣ative_password锛夌亴 dump"
+docker rm -f "$MIRROR" >/dev/null 2>&1 || true
+docker run -d --name "$MIRROR" --network "$NET" -e MYSQL_ROOT_PASSWORD=mirror_2026 \
+ mysql:8.0 --default-authentication-plugin=mysql_native_password --skip-log-bin >/dev/null
+for i in $(seq 1 40); do docker exec "$MIRROR" mysql -uroot -pmirror_2026 -e "SELECT 1" >/dev/null 2>&1 && break; sleep 2; done
+docker exec "$MIRROR" mysql -uroot -pmirror_2026 -e "CREATE DATABASE nacos_config DEFAULT CHARSET utf8mb4"
+docker exec -i "$MIRROR" mysql -uroot -pmirror_2026 nacos_config < /tmp/nacos_dump.sql
+log " mirror config_info=$(docker exec "$MIRROR" mysql -uroot -pmirror_2026 -N -e 'SELECT count(*) FROM nacos_config.config_info') 琛�"
+
+log "3) pgloader 鍏ㄨ嚜鍔� mirror鈫扨G锛坉rop+寤鸿〃+鏁版嵁锛�"
+cat > /tmp/nacos.load <<LOADEOF
+LOAD DATABASE
+ FROM mysql://root:mirror_2026@${MIRROR}:3306/nacos_config
+ INTO postgresql://postgres:${PG_PASSWORD}@${CONTAINER}:5432/nacos_config
+WITH include drop, create tables, create indexes, reset sequences, workers = 1, concurrency = 1
+SET work_mem to '128MB', maintenance_work_mem to '256MB';
+LOADEOF
+docker run --rm --network "$NET" -v /tmp/nacos.load:/tmp/nacos.load "$PGLOADER_IMAGE" pgloader /tmp/nacos.load
+
+log "4) 鏁村悎 schema锛歱gloader 榛樿鎶� MySQL 搴撳悕褰撴垚 PG schema锛屾暟鎹惤杩涗簡 nacos_config schema"
+# 鑰� install.sh 鐨� canonical Nacos 琛ㄥ湪 public銆傛妸 pgloader 鐨勮〃绉昏繘 public銆佷涪寮� public 绌鸿〃銆�
+# 鍒犵┖ nacos_config schema锛屽緱鍒板崟涓�鍙 Nacos 鐩存帴浣跨敤鐨� public schema锛堣瑙� lessons L040锛夈��
+# owned 搴忓垪/绱㈠紩/PK/娉ㄩ噴闅忚〃鑷姩绉诲姩锛涘垪榛樿鍊兼寜 OID 瀛樺偍涓嶆柇瑁傘�傛暣涓繃绋嬫斁涓�涓簨鍔¢噷鍘熷瓙瀹屾垚銆�
+docker exec -i "$CONTAINER" psql -U postgres -d nacos_config <<'PSQL'
+\set ON_ERROR_STOP on
+BEGIN;
+DO $$
+DECLARE r record;
+BEGIN
+ -- 鑻� install.sh 宸插湪 public 寤虹┖ Nacos 琛紝鍏堜涪寮冿紙浠呬涪涓� nacos_config schema 鍚屽悕鐨勶級
+ FOR r IN SELECT tablename FROM pg_tables WHERE schemaname='public'
+ AND tablename IN (SELECT tablename FROM pg_tables WHERE schemaname='nacos_config') LOOP
+ EXECUTE format('DROP TABLE public.%I CASCADE', r.tablename);
+ END LOOP;
+ -- 绉昏〃锛坥wned 搴忓垪/绱㈠紩/PK/娉ㄩ噴闅忚〃鑷姩绉诲姩锛屼笉鑳藉崟鐙Щ owned 搴忓垪锛�
+ FOR r IN SELECT tablename FROM pg_tables WHERE schemaname='nacos_config' LOOP
+ EXECUTE format('ALTER TABLE nacos_config.%I SET SCHEMA public', r.tablename);
+ END LOOP;
+END $$;
+DROP SCHEMA IF EXISTS nacos_config; -- 姝ゆ椂搴斾负绌猴紱鏃� CASCADE = 娈嬬暀鍒欐姤閿欏洖婊氾紙瀹夊叏闃�锛�
+-- pgloader 寤虹殑琛ㄥ綊 postgres锛涗粎 GRANT 涓嶅鈥斺�擭acos 鍗囩骇/寮�鍙戞敼 schema 鏃� DDL 闇� owner锛圠041锛夈��
+-- 鎸� create_app_roles.sql 鍚屾閫昏緫鎶婃墍鏈夋潈绉讳氦 nacos_app锛氭帓闄ゆ墿灞曞璞�(deptype='e')銆乷wned 搴忓垪闅忚〃銆�
+GRANT USAGE, CREATE ON SCHEMA public TO nacos_app;
+DO $$
+DECLARE r record;
+BEGIN
+ FOR r IN
+ SELECT c.oid::regclass AS obj
+ FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace
+ WHERE n.nspname='public' AND c.relkind IN ('r','p','S','v','m')
+ AND c.relowner <> 'nacos_app'::regrole
+ AND NOT EXISTS (SELECT 1 FROM pg_depend d WHERE d.objid=c.oid AND d.deptype='e')
+ AND NOT (c.relkind='S' AND EXISTS (
+ SELECT 1 FROM pg_depend d2 WHERE d2.classid='pg_class'::regclass
+ AND d2.objid=c.oid AND d2.deptype IN ('a','i')))
+ LOOP
+ EXECUTE format('ALTER TABLE %s OWNER TO nacos_app', r.obj);
+ END LOOP;
+END $$;
+ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO nacos_app;
+ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO nacos_app;
+COMMIT;
+PSQL
+
+log "5) 鏍¢獙 PG nacos_config锛坧ublic schema锛岄潪闄愬畾鏌ヨ=Nacos 瑙嗚锛�"
+docker exec "$CONTAINER" psql -U postgres -d nacos_config -c \
+ "SELECT 'config_info' t,count(*) c FROM config_info UNION ALL SELECT 'his_config_info',count(*) FROM his_config_info UNION ALL SELECT 'tenant_info',count(*) FROM tenant_info ORDER BY 1"
+
+log "6) 娓呯悊 mirror"
+docker rm -f "$MIRROR" >/dev/null && rm -f /tmp/nacos_dump.sql /tmp/nacos.load
+log "瀹屾垚 鉁�"
--
Gitblit v1.8.0