๋ฐฑ์—… ์„œ๋ฒ„์—์„œ DB ์„œ๋ฒ„์— ์›๊ฒฉ ์ ‘์†ํ•˜์—ฌ pg_dump๋กœ ๋ฐฑ์—… ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ, pg_dump ํด๋ผ์ด์–ธํŠธ ๋ฒ„์ „์€ ๋Œ€์ƒ PostgreSQL ์„œ๋ฒ„ ๋ฒ„์ „๋ณด๋‹ค ๋‚ฎ์„ ์ˆ˜ ์—†๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, PostgreSQL 16 ๋ฒ„์ „ DB ์„œ๋ฒ„๋ฅผ ๋ฐฑ์—… ์„œ๋ฒ„์— ์„ค์น˜๋œ pg_dump 14 ๋ฒ„์ „ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐฑ์—…ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด ๊ฒฝ์šฐ ๋ฐฑ์—… ์„œ๋ฒ„์— PostgreSQL 16 ๋ฒ„์ „ ํด๋ผ์ด์–ธํŠธ(pg_dump) ๋ฅผ ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•œ ๋’ค, ํ•ด๋‹น ๋ฒ„์ „์˜ pg_dump๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ์—… ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋ณต๊ตฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

 

DB ๋ฐฑ์—… ํŒŒ์ผ์€ ์ „์ฒด ๋ฐฑ์—…๊ณผ ํŠน์ • DB์˜ ๋ฐฑ์—…์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

์‹ค๋ฌด์—์„œ๋Š” ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์ด ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์—  pg_dumpall์œผ๋กœ ๋ฐ์ดํ„ฐ, ๊ธ€๋กœ๋ฒŒ ๊ฐ์ฒด ๋ชจ๋‘ ๋ฐฑ์—…ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

Postgresql์€ pg_dump์™€ pg_dumpall์„ ํ†ตํ•ด์„œ ๋ฐฑ์—… ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ฆ๋ถ„๋ฐฑ์—…์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๋ฐฑ์—… ์ƒ์„ฑ ๋ฐฉ๋ฒ•

์šฐ์„  ๋ฐฑ์—…์€ postgres ๊ณ„์ •์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.

 

1. pg_dumpall์„ ์‚ฌ์šฉํ•˜์—ฌ cluster ์ „์ฒด์˜ ๊ธ€๋กœ๋ฒŒ ๊ฐ์ฒด(์‚ฌ์šฉ์ž, ๊ถŒํ•œ, tablespace)๋ฅผ ๋จผ์ € ๋ฐฑ์—…ํ•˜๋Š” globals-only ๋ฐฑ์—… ํ•„์š”ํ•˜๋‹ค.

pg_dumpall -U postgres -v --roles-only -f "/backup/role.sql"

 

2. ํŠน์ • DB์„ ๋ฐฑ์—…ํ•˜๋Š” ๊ฒฝ์šฐ pg_dump ์‚ฌ์šฉ

๋ฐฑ์—…ํŒŒ์ผ ์šฉ๋Ÿ‰์ด ํฌ๋ฉด ํŒŒ์ผ ์••์ถ•์„ ํ•ด์„œ gz ํŒŒ์ผ๋กœ ๋ฐฑ์—…์„ ํ•œ๋‹ค.

pg_dump {DB๋ช…} | gzip > /backup/backup-ex.gz

 

๋ฐฑ์—… ๋ณต์› ๋ฐฉ๋ฒ•

์šฐ์„  ๋ฐฑ์—…์€ postgres ๊ณ„์ •์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.

 

1. Role ๋ณต๊ตฌ

psql -f /data/backup/pgsql_backup/dev/platform_bizchat_role_root.sql postgres

# ๊ณ„์ • ๋ชฉ๋ก ํ™•์ธ(psql์—์„œ ํ™•์ธ)
SELECT rolname, rolsuper, rolcreaterole, rolcreatedb, rolcanlogin FROM pg_roles;

 

2. DB ๋ณต๊ตฌ

๋Œ€์ƒDB๋งŒ ์—†๋‹ค๋ฉด ๋Œ€์ƒDB๋ฅผ ์ƒ์„ฑํ•œ ๋’ค DB ๋ณต๊ตฌํ•œ๋‹ค.

15GB ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ์‹œ 20๋ถ„ ์ •๋„ ์†Œ์š”๋˜๋ฉฐ, 14๋ฒ„์ „์˜ ์Šคํ‚ค๋งˆ์™€ ๋ฐ์ดํ„ฐ๋ฅผ 16๋ฒ„์ „์œผ๋กœ ๋ณต๊ตฌํ–ˆ์„๋•Œ ํŠน์ด์‚ฌํ•ญ์€ ์—†์—ˆ๋‹ค.

# DB ์ƒ์„ฑ(psql๋กœ ์ง„ํ–‰)
CREATE DATABASE {DB๋ช…} OWNER {DB๊ณ„์ •} LC_COLLATE 'C.UTF-8' LC_CTYPE
'C.UTF-8' TEMPLATE template0;

# DB ์กฐํšŒ
select * from PG_DATABASE; 

# ๋ฐฑ์—… ๋ณต๊ตฌ
gunzip < backup-ex.gz | psql -d {DB๋ช…}

 

3. ๋ณต๊ตฌ ์™„๋ฃŒ ํ›„ ํ†ต๊ณ„์ •๋ณด ๊ฐฑ์‹ 

ANALYZE; 

 

 

Troubleshooting

ROLE ๋ณต๊ตฌ ์‹œ ์ฃผ์˜ํ•  ์ 

1)

์˜ค๋ฅ˜์ฝ”๋“œ: ERROR: role "existing_role" already exists

-> ๋ฐฑ์—… ํŒŒ์ผ ๋ณต๊ตฌ ์‹œ ๊ธฐ์กด role์ด ์žˆ๋‹ค๋ฉด ์—๋Ÿฌ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜ค๊ณ  ๋ณต๊ตฌํ•  ๋•Œ role ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค. (๊ธฐ์กด role์˜ ๊ถŒํ•œ/์†์„ฑ ์ž์ฒด๋Š” ์•ˆ ๋ฐ”๋€œ)

but, ์•„๋ž˜ ALTER๋ฌธ์œผ๋กœ role์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋ฐ”๋€”์ˆ˜์žˆ๋‹ค.

ALTER ROLE ex WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'XXXXXXXXXXX';

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•:  --no-role-passwords๋กœ globals ๋‹ค์‹œ ๋œจ๊ฑฐ๋‚˜ OR ์ˆ˜๋™์œผ๋กœ ๊ธฐ์กด Role์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ALTER ๋ฌธ์„ ์—†์•ค๋‹ค.

 

2)

์˜ค๋ฅ˜ ์ฝ”๋“œ: ERROR: require a VALID UNTIL option

์›์ธ: credcheck extension ์„ค์ •์œผ๋กœ ์ธํ•ด CREATE ROLE ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

# ํ•ด๋‹น ์„ธ์…˜์—์„œ๋งŒ credcheck ๋น„ํ™œ์„ฑํ™”
SET credcheck.password_valid_until = 0;
SET credcheck.password_valid_max = 0;
SELECT pg_reload_conf(); // ์žฌ์‹œ์ž‘ ์—†์ด ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ €์žฅ

# credcheck ํ™•์ธ
SHOW credcheck.password_valid_max;
SHOW credcheck.encrypted_password_allowed;

# ์‹œ์Šคํ…œ์ƒ ์˜๊ตฌ ์ ์šฉ์ด๊ธฐ์— ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
ALTER SYSTEM SET credcheck.password_valid_until = 0;
ALTER SYSTEM SET credcheck.password_valid_max = 0;
SELECT pg_reload_conf();

# credcheck๋ฅผ ์ œ์™ธ ๊ณ„์ • ์ถ”๊ฐ€
# ๋ณดํ†ต ์‹œ์Šคํ…œ ๊ณ„์ •์ด ํ•ด๋‹น
ALTER SYSTEM SET credcheck.whitelist = '{๊ณ„์ •๋ช…}';
SELECT pg_reload_conf();

 

'DB > Postgresql' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

PostgreSQL pgpool + watchdog๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DB ์ด์ค‘ํ™”  (0) 2026.01.18

+ Recent posts