3. 재초기화 · 업그레이드 · 제거
이 장을 마치면: 데이터를 새로 만들거나 되돌리고, 새 버전으로 올리거나 되돌리고, GritDB를 걷어낸다.
- 이 장의 명령은 압축을 푼 설치 파일 디렉토리에서 실행한다. 설치 스크립트가 설치 경로에 없기 때문이다.
3.1 재초기화 (--reinit-data)
재초기화는 데이터를 새로 만든다. 기존 데이터는 지우지 않고 이름을 바꿔 남긴다.
-
분석계면 먼저 subscription을 치운다(6.4.4의 1~3번). 치우지 않으면 운영 DB 슬롯이 WAL을 계속 붙잡는다.
-
정지한다.
~/gritdb1/bin/gritdb-stopQuickStart 4.5의 정지 확인을 실행해 출력이 없는지 확인한다. 실행 중에 설치 스크립트를 돌리면 대개
▶ 2.1에서 멈춘다. 실행 중인 파일은 덮지 못하기 때문이다(Text file busy). 이때는 정지한 뒤 같은 명령을 다시 실행한다. 다른 경로의 PostgreSQL이 이 데이터를 쓰고 있으면A PostgreSQL instance is running on this data directory (PID: <pid>).로 거부된다. -
데이터를 재배치했으면(2.4) 서비스 계정이 실경로의 상위 디렉토리에 쓸 수 있는지 본다. 데이터 볼륨이 mount 지점이면 상위 파일시스템의 여유도 본다(아래 경고).
test -w "$(dirname "$(readlink -f ~/gritdb1/datafiles)")" && echo OKOK가 나오면 정상이다.--pgdata로 재배치했으면~/gritdb1/datafiles/pgdata로도 같은 확인을 한다.- 그렇지 않으면 root가 그 디렉토리를 서비스 계정에 넘기거나, root로
--user를 주고 재초기화한다(2.3). 이름을 바꾸지 못하면Rename failed; nothing was lost, rolled back.로 멈추고 데이터는 그대로다.
-
재초기화한다. 표준 경로가 아니면 처음 설치 때의
--prefix를 같이 준다. root면--user도,--no-config로 설치했으면 그것도 같이 준다(2.3, 2.6).cd <설치한 판의 압축을 푼 디렉토리> jq -r .product_version manifest.json ~/gritdb1/share/gritdb/manifest.json두 줄이 같으면 설치한 판이므로 아래 명령을 실행한다. 다르면 실행하지 않는다. 이때는 설치한 판의 설치 파일을 찾거나 다시 반입한다(QuickStart 2.3).
./install_gritdb.sh --reinit-data화면에
Previous data preserved with suffix .old-<일시>줄이 나오고▶ 3.1단계가OK인지 확인한다. 첫 줄[INFO] Upgrading existing 1.x install in place: <설치 경로>는 재초기화에도 나오는 정상 출력이다.~/pkg/gritdb-*/꼴로 들어가지 않는다. 업그레이드(3.5) 뒤에는 압축을 푼 디렉토리가 둘이라cd가 실패하고, 다음 줄이 지금 디렉토리에서 실행된다.--pgdata로 재배치했으면 기동 전에 같은--pgdata값으로 설치 스크립트를--reinit-data없이 한 번 더 실행한다. 재초기화가datafiles/pgdata링크를 옛 보관본과 함께 옮기기 때문이다. 이때▶ 3.1은SKIP (existing data kept; ...)로 나온다.readlink ~/gritdb1/datafiles/pgdata를 실행해<pgdata 실경로>가 나오는지 확인한다.
-
운영자 설정을 다시 넣는다(아래 경고).
-
기동한 뒤 QuickStart 4.2와 4.3으로 확인한다. 이어서 보안 설정을 다시 한다. 함수 실행 권한은
template1과postgres부터 거둔다(11.5). 새datafiles실경로는775로 생기므로chmod 700을 실행한다(11.7). 그다음 데이터베이스, 테이블, 등록을 다시 만들고(6장) 11.10 점검표로 확인한다. 분석계는 처음부터 받는다(6.4.1).- 새 데이터의 함수 실행 권한은 설치 기본값이라 모든 계정에 있다(11.5).
template1에서 먼저 거두면 그 뒤에 만드는 데이터베이스도 거둔 채로 생긴다.
- 새 데이터의 함수 실행 권한은 설치 기본값이라 모든 계정에 있다(11.5).
- 옛 데이터는
<datafiles 실경로>.old-<YYYYmmddHHMMSS>로 이름만 바뀐다(표준 경로에서는~/gritdb1/datafiles.old-<일시>).--pgdata로 재배치했으면<pgdata 실경로>.old-<일시>도 생긴다. 되돌리려면 3.2를, 지우려면 3.3을 본다. - 포트는 이어받는다.
config/(GritDB 엔진 설정)와log/는 그대로 남는다.
⚠ 새 데이터에는 운영자가 넣은 설정이 없다
- 이유:
pg_hba.conf,postgresql.conf의 블록 밖 줄,ALTER SYSTEM값은 이름이 바뀐 옛 디렉토리 안에만 남는다. 그대로 기동하면 인증이 설치 기본값인 trust로 돌아간다(11.2).- 대신: 기동 전에
pg_hba.conf를 옛 파일과 비교해 고친다(11.3).postgresql.conf는 관리 블록 밖의 차이만 새 파일에 옮긴다. 관리 블록은 설치가 다시 썼기 때문이다(5.2).ALTER SYSTEM값은 옛postgresql.auto.conf를 보고 기동 뒤 다시 넣는다(5.3). 다시 넣은 값은 5.3의 확인 쿼리로 확인한다.pending_restart가t면 재기동한다.
OLD=$(ls -d "$(readlink -f ~/gritdb1/datafiles)".old-* | tail -1)
P=$(readlink -f ~/gritdb1/datafiles/pgdata)
OLDP=$(ls -d "$P".old-* 2>/dev/null | tail -1)
OLDP=${OLDP:-$OLD/pgdata}
diff "$OLDP/pg_hba.conf" "$P/pg_hba.conf"
diff "$OLDP/postgresql.conf" "$P/postgresql.conf"
cat "$OLDP/postgresql.auto.conf"
-
--pgdata로 재배치했으면 위 명령이<pgdata 실경로>.old-<일시>/를 고른다. 이때는 4번에서 설치 스크립트를 한 번 더 실행한 뒤에 한다. 옛 보관본 안의pgdata링크는 새 데이터를 가리킨다. -
⚠ 데이터 볼륨이 mount 지점이면 재초기화가 옛 데이터를 상위 파일시스템(예:
/)의<mount 지점>.old-<일시>로 옮긴다. 이때 여유가 없으면 그 파일시스템이 차므로 먼저df -h <상위 디렉토리>로 여유를 본다.
3.2 이전 데이터 복원
*.old-<일시>를 원래 이름으로 되돌린다. 같은 실경로로 되돌린다(1.5).
-
정지하고 QuickStart 4.5의 정지 확인을 실행한다.
-
되돌릴 보관본을 고른다.
D=$(readlink -f ~/gritdb1/datafiles) ls -d "$D".old-* -
지금 데이터를 이름을 바꿔 남기고, 보관본을 원래 이름으로 되돌린다.
mv "$D" "$D.cur-$(date +%Y%m%d%H%M%S)" mv "$D.old-<일시>" "$D"--pgdata로 재배치했으면<pgdata 실경로>도 같은 방법으로 되돌린다. 이때 같은<일시>를 쓴다. 보관본의datafiles.old-<일시>/pgdata링크는<pgdata 실경로>를 가리킨다. 그래서 두 곳을 같은<일시>로 맞춰야 옛 데이터가 이어진다.- 데이터 볼륨이 mount 지점이면 디렉토리째가 아니라 안의 내용을 옮긴다. 먼저 지금 내용을 다른 자리로 옮기고,
<mount 지점>.old-<일시>/안의 것을<mount 지점>/로 옮긴다. 상위 파일시스템의 여유는 3.1을 본다.
-
정상 정지 표식이 있으면 이름을 바꿔 둔다. 그러면 다음 기동이 복구 과정을 거친다.
mv ~/gritdb1/run/grit_admin_clean_shutdown ~/gritdb1/run/grit_admin_clean_shutdown.cur-$(date +%Y%m%d%H%M%S)파일이 없다는 오류가 나오면 정상이다. 이때는 이 단계를 건너뛴다.
-
기동하고 8.5로 확인한다.
- 분석계에서는 복원한 데이터 시점 뒤의 운영 DB 변경이 다시 오지 않는다. 그래서 복원 뒤 8.6으로 다시 받는다(8.4 경고).
.cur-<일시>는 확인이 끝난 뒤 지운다. 이때 3.3의 안전 삭제와 같은 규정을 따른다.
3.3 이전 데이터 정리 (--purge-old)
- 지우는 것:
<datafiles 실경로>.old-*,<pgdata 실경로>.old-*(--pgdata재배치),run/grit_admin_clean_shutdown.old-* - 지우지 않는 것:
.cur-*(3.2),.failed-*(3.7),.before_restore_*(8.4). 이 셋은 확인이 끝나면 직접 지운다. - 확인 질문 없이 지운다. 같은 실행에
--reinit-data가 있으면 재초기화보다 먼저 지운다. --purge-old만 주어도 설치 스크립트는 같은 판을 제자리에 다시 설치한다. 그래서 GritDB를 정지하고, 설치한 판과 같은 설치 파일의 압축을 푼 디렉토리에서 실행한다. 이때 처음 설치 때의 옵션(--prefix,--no-config, root의--user)을 같이 준다.
⚠
--purge-old는 확인 없이 지우고 되돌릴 수 없다
- 이유: 옛 보관본은 재초기화를 되돌리는 유일한 자료다(3.2).
- 대신: 먼저 아래 목록을 보고, 남길 것은 백업한 뒤(8.2) 실행한다.
-
지울 것을 본다.
D=$(readlink -f ~/gritdb1/datafiles) P=$(readlink -f ~/gritdb1/datafiles/pgdata) ls -d "$D".old-* "$P".old-* ~/gritdb1/run/grit_admin_clean_shutdown.old-* 2>/dev/null -
정지한 뒤 설치한 판의 압축을 푼 디렉토리에서 지운다. 3.1의 4번처럼 판을 먼저 견준다.
cd <설치한 판의 압축을 푼 디렉토리> ./install_gritdb.sh --purge-old1번 명령을 다시 실행해 출력이 없는지 확인한다. 화면에는 지운 것마다
[INFO] Purging <경로>가 나오고,▶ 3.1은SKIP (existing data kept; ...)로 나온다. 데이터는 그대로다.--pgdata로 재배치하지 않았으면 옛 pgdata는$D.old-*안에 있다. 이때$P.old-*는 따로 생기지 않는다.
--reinit-data --purge-old를 함께 주면 옛 보관본을 지운 뒤 지금 데이터를 새 보관본으로 남긴다. 그래서 보관본이 하나만 남는다. ⚠ 확인 없이 지운다.--purge-old는 일반 삭제다. 금융권 등에서 안전 삭제가 필요하면 위 대상을 기관 규정의 도구(shred등)로 지운다.
3.4 업그레이드 전 점검
| # | 확인 | 명령과 방법 | 정상 |
|---|---|---|---|
| 1 | 새 판의 안내 | 새로 압축을 푼 디렉토리의 docs/RELEASE-NOTES.md와 새 판의 Admin 3장 |
다 읽었다. 막히면 지원 문의(0장)를 한다 |
| 2 | 새 설치 파일 반입 검수 | 먼저 옛 판의 설치 파일(~/pkg의 gritdb-*.tar.gz와 압축을 푼 디렉토리)을 ~/pkg 밖(예: ~/pkg_old/)으로 옮긴다. 그다음 QuickStart 2.3을 따른다(1.7) |
OK와 Dist verification passed가 나오고, ~/pkg에 새 판 하나만 있다 |
| 3 | 정식 배포용 설치 파일 | 새로 압축을 푼 디렉토리에서 jq -r .channel manifest.json |
release(0장) |
| 4 | 기준 수집 | 7.7의 수집물 | 파일로 남겼다 |
| 5 | 등록 테이블, 행 수, 조회 함수 | 응용 프로그램을 멈추고 남은 세션을 끊은 뒤(8.2의 1번) 아래 ① | 파일로 남겼다 |
| 6 | 운영자 설정 | 아래 ② | 파일로 남겼다 |
| 7 | GritDB 엔진 설정 키 | 아래 ③ | 출력 없음 |
| 8 | 정지 | ~/gritdb1/bin/gritdb-stop → cat ~/gritdb1/run/grit_admin_clean_shutdown → QuickStart 4.5의 정지 확인 |
CLEAN_SHUTDOWN, 프로세스 0(출력 없음). 파일이 없으면 8.2의 3번 대체 줄을 따른다. 실행 중이면 설치가 ▶ 2.1에서 Text file busy로 멈추고 bin/ 일부만 바뀐 채 남는다. 이때는 정지 뒤 다시 실행한다(3.1의 2번) |
| 9 | 백업 | 아래 ④ | 모든 tar 줄이 = 0 |
- QuickStart 2.3의
gritdb-*꼴이 두 판을 함께 잡으면 새 판이 풀리지 않고 옛 판을 검수한다. 그래서 2번에서 옛 판 파일을 옮긴다. 원복(3.7)은 3.4의 사본으로 하므로 옛 설치 파일을 쓰지 않는다. - 분석계면 8번 정지부터 3.5의 6번 기동까지 걸릴 시간이 4.7의 “멈춰 둘 수 있는 시간” 안인지 먼저 본다. 넘으면 업그레이드 뒤 처음부터 다시 받는다(8.6). 이때는 그 시간까지 작업 시간으로 잡는다. ④의 복사 시간은 8.2를 본다.
① 등록 테이블, 행 수, 조회 함수(①~④는 $UB가 있는 같은 셸에서 한다)
UB=<백업 자리>/gritdb_before_upgrade_$(date +%Y%m%d_%H%M%S)
mkdir -p "$UB"
~/gritdb1/bin/psql -p 5432 -d <db> -Atc "SELECT schema_name, table_name FROM get_gritsurfer_tables() ORDER BY 1, 2" > "$UB/tables_<db>.txt"
~/gritdb1/bin/psql -p 5432 -d <db> -Atc "SELECT count(*), sum(<숫자 열>) FROM <s>.<t>" > "$UB/count_<s>.<t>.txt"
~/gritdb1/bin/psql -p 5432 -d <db> -c '\df get_gritsurfer_*' > "$UB/functions_<db>.txt"
- 첫 두 줄은 한 번만 실행한다. 셋째와 다섯째 줄은 데이터베이스마다, 넷째 줄은 표본 테이블마다 실행한다. 표본은 7.10의 1번 기준을 따르고, 파일 이름은 8.2의 2번과 같다.
<백업 자리>는 데이터 볼륨이 아닌 디스크다. ④의 사본도 이 자리에 둔다. 업그레이드 뒤 대조(3.5의 8번)와 원복(3.7)이 이 파일을 쓴다.
② 운영자 설정
~/gritdb1/bin/psql -p 5432 -d postgres -Atc "SELECT name, setting, source, sourcefile FROM pg_settings WHERE source NOT IN ('default', 'override') ORDER BY 1;" > "$UB/settings_before.txt"
- 튜닝 블록 값은 새 판의 기본값으로 다시 써진다. 메모리 값 셋은 그때의 서버 메모리로 다시 계산한다(5.5).
ALTER SYSTEM값은 남는다(5.2와 5.3). 열의 뜻은pg_settings에 있다. sourcefile은 값이 온 파일이다.postgresql.conf면 튜닝 블록이나 블록 밖 줄에서,postgresql.auto.conf면ALTER SYSTEM에서 온 값이다. 업그레이드 뒤 견준다(3.5의 7번).
③ GritDB 엔진 설정 키 — 새 판에 더해진 키를 찾는다. 설치 스크립트는 기존 설정 파일을 덮지 않는다. 키가 하나라도 없으면 GritDB가 기동하지 않는다(5.6).
cd <새로 압축을 푼 디렉토리>
for f in etc/templates/grit_*.config; do
diff <(grep -oE '^[a-z0-9_.]+' "$f" | sort -u) <(grep -oE '^[a-z0-9_.]+' ~/gritdb1/config/"$(basename "$f")" | sort -u)
done
- 출력이 없으면 키가 같다.
<로 시작하는 줄은 새 판에 더해진 키다. 업그레이드 뒤 그 파일에 새 판 템플릿의 줄을 더한다(3.5의 5번).
④ 백업 — 8번 정지 뒤 설치 경로 전체를 복사한다($UB가 있는 ①과 같은 셸). 원복(3.7)은 이 사본으로 한다.
readlink -f ~/gritdb1/datafiles ~/gritdb1/datafiles/pgdata > "$UB/realpaths.txt"
tar --sparse -cf "$UB/gritdb1.tar" -C ~ gritdb1 ; echo "gritdb1.tar = $?"
ls -ld ~/gritdb1/datafiles ~/gritdb1/datafiles/pgdata의 첫 글자가l이면 심링크다. 심링크는tar가 링크만 담으므로 그 실경로를 따로 담는다.datafiles가 심링크면(--datafiles, 2.4)tar --sparse -cf "$UB/datafiles.tar" -C "$(readlink -f ~/gritdb1/datafiles)" . ; echo "datafiles.tar = $?"를 실행한다.datafiles/pgdata가 심링크면(--pgdata, 2.4)tar --sparse -cf "$UB/pgdata.tar" -C "$(readlink -f ~/gritdb1/datafiles/pgdata)" . ; echo "pgdata.tar = $?"를 실행한다.- 모든 줄이
= 0이면 정상이다.0이 아니면 그 사본으로 원복할 수 없으므로 고쳐서 다시 한다. -z로 압축하지 않는다. CPU 하나로 압축하므로 멈춰 있는 시간이 는다. 시간과 공간은 8.2를 본다.
3.5 패치 · minor 업그레이드
- 패치는 같은 판(1.1)의 새 설치 파일이다. minor 업그레이드에서는 같은 major 안에서 판이 오른다. 둘 다 같은 설치 경로에 제자리로 설치한다.
- 데이터, 포트,
config/,postgresql.conf의 블록 밖 줄,ALTER SYSTEM값은 유지된다. 블록 밖 줄 가운데 블록과 같은 설정은 블록 값에 덮인다(2.5). - 설치 파일(
bin/,lib/,share/…)과 관리 블록은 다시 써진다. 관리 블록의 튜닝 값은 새 기본값이 된다.
-
3.4 점검을 끝낸다.
-
GritDB가 정지했는지 확인한다(QuickStart 4.5). 실행 중이면 3.1의 2번을 본다.
-
새로 압축을 푼 디렉토리에서 설치한다. 처음 설치 때의
--prefix,--no-config, root의--user를 같이 준다. 재배치 옵션은 빼거나 같은 값을 준다(2.4).cd <새로 압축을 푼 디렉토리> ./install_gritdb.sh- 화면에는
Upgrading existing 1.x install in place: <설치 경로>가 나오고,▶ 3.1단계는SKIP (existing data kept; ...)로 나온다. 마지막 줄은Install complete.다.
- 화면에는
-
설치를 확인한다.
jq -r .product_version ~/gritdb1/share/gritdb/manifest.json새 판 번호가 나오면 정상이다.
-
3.4의 ③에서 찾은 새 키를
~/gritdb1/config/의 그 파일에 더한다(5.6). -
기동한 뒤 QuickStart 4.2와 4.3으로 확인한다.
-
운영자 설정을 견준다.
$UB는 3.4의 백업 자리다. 셸이 바뀌었으면UB=<그 자리>로 다시 정한다.~/gritdb1/bin/psql -p 5432 -d postgres -Atc "SELECT name, setting, source, sourcefile FROM pg_settings WHERE source NOT IN ('default', 'override') ORDER BY 1;" > "$UB/settings_after.txt" diff "$UB/settings_before.txt" "$UB/settings_after.txt"- 다른 줄은 새 판이 바꾼 값이다(튜닝 블록에서는 새 기본값). 그대로 둘지 정한다.
- 튜닝 블록에서 바꿔 쓰던 값이면
ALTER SYSTEM으로 다시 정한다(5.3). 재기동이 필요한 값은 5.4를 본다.
-
8.5의 2~5번으로 대조한다. 이때
<백업 자리>/<백업 이름>은$UB로 바꿔 읽는다. -
데이터베이스마다 조회 함수를 확인한다. 확장 SQL은 제자리에서 갱신되지 않으므로 함수 서명이 새 판과 다를 수 있다.
~/gritdb1/bin/psql -p 5432 -d <db> -c '\df get_gritsurfer_*'- 서명이 새 판의 A.3과 같으면 정상이다.
- 다르면 그 함수를 쓰지 않고 지원 문의(0장)를 한다.
ALTER EXTENSIONgritsurfer UPDATE로는 바뀌지 않는다.\dx gritsurfer의 판 번호는 판이 올라도 같다. 그러므로 이 명령은 실행하지 않는다.
-
8번과 9번이 맞으면 응용 프로그램, 리포트, BI 도구, CDC, ETL 도구를 다시 연다. 원복(3.7)을 할지는 그 전에 정한다. 다시 연 뒤에 들어온 쓰기는 원복하면 사라지기 때문이다.
3.6 major 업그레이드 (예: 1.x → 2.x)
- major가 바뀌는 판은 새 경로에 설치한다. 기본 경로는
~/gritdb<major>다(예:~/gritdb2). 같은 경로에 설치하면Prefix <경로> holds major version <n>; this dist is major <m>.로 거부된다. 옛 설치본은 그대로 남는다. - 새 경로 설치는 QuickStart 3장을 본다. 다른 포트로 설치한다(
--pgport, 2.1, 2.9). 한 서버에 두 판을 두면 메모리를 넘겨 쓴다(2.9). 그래서 두 판은 옮기는 동안만 둔다. - 분석계면 새 경로에 새 판을 설치하고 운영 DB에서 다시 받는다(6.4.1과 8.6). 이때는 데이터를 옮길 필요가 없다. 그동안 운영 DB에 슬롯이 하나 더 생긴다(6.4.3). 다 받은 뒤 옛 판의 subscription을 치운다(6.4.4).
- 한 데이터베이스 구성이면 새 판에 스키마 → 등록 → 데이터 순서로 옮긴다(8.3). PostgreSQL의
pg_upgrade는 쓰지 않는다(A.1). 그 판의 Admin 3장을 보고 지원 문의(0장)를 한다.
3.7 원복
업그레이드가 실패하면 3.4의 사본으로 되돌린다.
⚠ 원복하면 3.4의 백업 때로 돌아간다
- 이유: 사본을 통째로 되돌린다. 한 데이터베이스 구성에서는 사본을 만든 뒤에 들어온 쓰기(3.5의 10번에서 응용을 다시 연 뒤)가 사라진다.
- 대신: 응용을 다시 연 뒤라면 원복하기 전에 지원 문의(0장)를 한다. 분석계는 아래 5번(다시 받기)을 따른다.
-
정지하고 QuickStart 4.5의 정지 확인을 실행한다.
-
지금 설치 경로의 이름을 바꿔 남긴다. 실경로를 먼저 구한다. 이름을 바꾼 뒤에는 링크로 찾을 수 없기 때문이다.
D=$(readlink -f ~/gritdb1/datafiles) P=$(readlink -f ~/gritdb1/datafiles/pgdata) T=$(date +%Y%m%d%H%M%S) mv ~/gritdb1 ~/gritdb1.failed-$Tprintf '%s\n' "$D" "$P" | diff - "$UB/realpaths.txt"를 실행해 출력이 없는지 확인한다.$UB는 3.4의 백업 자리다.datafiles가 심링크였으면$D도 남긴다. 이때는mv "$D" "$D.failed-$T",mkdir "$D",chmod 700 "$D"를 차례로 실행한다. mount 지점이면 안의 내용을 옮긴다(3.2).datafiles/pgdata가 심링크였으면$P도 같은 방법으로 남긴다.
-
3.4의 사본을 같은 실경로로 되돌린다.
tar -xf "$UB/gritdb1.tar" -C ~datafiles가 심링크였으면tar -xf "$UB/datafiles.tar" -C "$D"를 실행한다.datafiles/pgdata가 심링크였으면tar -xf "$UB/pgdata.tar" -C "$P"를 실행한다.readlink -f ~/gritdb1/datafiles ~/gritdb1/datafiles/pgdata | diff - "$UB/realpaths.txt"를 실행해 출력이 없는지 확인한다.
-
기동한 뒤
jq -r .product_version ~/gritdb1/share/gritdb/manifest.json을 실행해 옛 판 번호가 나오는지 본다. 그다음 8.5로 확인한다. 이때<백업 자리>/<백업 이름>은$UB로 바꿔 읽는다. -
분석계는 새 판으로 한 번이라도 기동했으면(3.5의 6번) 8.6으로 다시 받는다. 기동하면 subscription이 운영 DB 슬롯에서 바로 받기 시작하고, 운영 DB 슬롯은 뒤로 가지 않는다(8.4 경고).
- 옛 판 설치 파일을 같은 경로에 다시 설치하지 않는다. 제자리 설치는 새 판에만 있는 파일을 남겨 두 판의 파일이 섞인다. 대신 사본을 통째로 되돌린다.
⚠ 낮은 버전 설치 파일로 덮어쓰는 다운그레이드는 지원하지 않는다
- 이유: 설치 스크립트는 판 번호를 비교하지 않아 막지 않는다. 덮어쓰면 두 판의 파일이 섞인다.
- 대신: 3.4의 사본으로 되돌린다(위 절차).
3.8 제거 · 파기
⚠ 제거는 되돌릴 수 없다
- 이유: 설치 경로와 데이터 볼륨을 지우면 데이터, 설정, 로그가 모두 사라진다.
- 대신: 데이터를 남길지 먼저 정한다. 남기려면 정지 후 백업(8.2)을 끝낸 뒤 지운다.
-
분석계면 먼저 subscription을 치운다(6.4.4). 운영 DB에 슬롯을 남기지 않는다.
-
정지하고 QuickStart 4.5의 정지 확인을 실행한다.
-
데이터를 남기려면 백업한다(8.2).
-
지울 자리를 적는다. 설치 경로를 지우기 전에 인스턴스 ID와 실경로를 구한다.
~/gritdb1/bin/grit_instance_id ~/gritdb1 readlink -f ~/gritdb1/datafiles readlink -f ~/gritdb1/datafiles/pgdata cat /proc/sys/kernel/core_pattern- 둘째 줄과 셋째 줄은
datafiles와pgdata의 실경로다. 재배치하지 않았으면 셋째 줄은<둘째 줄>/pgdata이므로 따로 지울 것이 없다.
- 둘째 줄과 셋째 줄은
-
QuickStart GDB-SHUTDOWN-001의 조치로 공유 메모리 잔여를 지운다. 4번의 인스턴스 ID로 끝나는 것만 지운다.
-
설치 경로, 재배치한 자리, 보관본(
.old-*등)을 지운다.rm -rf ~/gritdb1 ~/gritdb1.failed-*- 재배치한 자리에서는 4번의 두 실경로와 그 옆의
.old-*(3.1),.cur-*(3.2),.failed-*(3.7),.before_restore_*(8.4)를 모두 지운다.rm -rf ~/gritdb1은 심링크만 지우고, 심링크가 가리키는 데이터는 남긴다. - 실경로가 mount 지점이면(
mountpoint -q <실경로> && echo mount)rm -rf는 안의 내용만 지우고Device or resource busy로 끝난다. 이때는 root가umount <실경로>를 실행하고,/etc/fstab의 그 줄을 지우고, 빈 디렉토리를rmdir로 지운다. mount 지점은 3.1과 3.2를 본다. - 설치 경로의 상위 디렉토리가 root 것이면(
/opt등, 2.2와 2.3) 서비스 계정이 실행한rm -rf는 안의 내용만 지우고Permission denied로 끝난다. 이때는 root가rmdir <설치 경로>로 빈 디렉토리를 지운다. - 압축을 푼 설치 파일(
~/pkg)도 지운다.
- 재배치한 자리에서는 4번의 두 실경로와 그 옆의
-
그 밖의 자리를 정리한다. core 파일(4번에서 구한
core_pattern자리), 기동 셸TMPDIR의__tkidx_spill_*.tmp(1.4), 서버 부팅 때 기동 파일(4.6),/etc/security/limits.conf의 줄(1.4), 방화벽 규칙(1.6),/etc/logrotate.d/gritdb(9.4)를 지운다./etc/systemd/logind.conf.d/gritdb.conf(1.4 ⑤)는 같은 서버에 이 설정이 필요한 다른 서비스가 없을 때만 지운다. 이 파일을 지운 뒤에는systemctl restart systemd-logind를 실행한다./etc아래는 root가 정리한다. -
확인한다.
ls -d ~/gritdb1*를 실행해 없다는 오류가 나오는지 본다. 이 꼴은 3.7에서 생긴.failed-*도 잡는다.ls -d <datafiles 실경로>* <pgdata 실경로>* 2>/dev/null(4번 값)과ls /dev/shm | grep "_<인스턴스 ID>$"를 실행해 출력이 없는지 본다. -
root로userdel -r gritdb를 실행해 서비스 계정을 정리한다. 홈 디렉토리도 함께 지워진다.
- 금융권 등 파기 규정이 있으면 위 대상을 일반 삭제(
rm)로 지우지 않는다. 이때는 기관 규정의 안전 삭제 도구(shred등)나 볼륨 단위 파기로 지운다. 로그, core,datafiles/query_text_archive.jsonl에는 SQL 원문과 데이터 값이 있다(11.1). - 설치 경로 밖의 사본은 백업(8.2,
<백업 자리>/gritdb_*)과 업그레이드 사본(3.4,<백업 자리>/gritdb_before_upgrade_*)이다. 이 사본을 남길지 정한다. 남기지 않으면 같은 규정으로 지운다. - 9번의
userdel -r도 일반 삭제다. 그래서 파기 규정이면 9번 전에 홈 안의 사본을 같은 도구로 지운다. 대상:~/.pgpass,~/.psql_history(11.7),~/gritdb_support_*(9.7, QuickStart 7.4),~/gritdb_baseline_*(7.7), 옮기고 남은 덤프,<t>.csv(8.3)
문제가 생기면
- QuickStart 7장의 GDB-INSTALL 계열과 TroubleShooting을 본다.
더 알아보기
- 백업과 복구는 8장을 본다.
- PostgreSQL 17 문서:
pg_hba.conf,ALTER SYSTEM,ALTER EXTENSION,pg_upgrade