๋ฐฑ์ ์๋ฒ์์ 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 |
|---|