1 ๋ถ„ ์†Œ์š”

1. ๋ฒ ์ด์Šค ๋ฐฑ์—…

# ๋ฒ ์ด์Šค ๋ฐฑ์—… ๋ฐ›๊ธฐ
pg_basebackup -D /var/lib/pgsql/15/backups/base -Fp -Xs -P

# ํ™•์ธ
ls -l /var/lib/pgsql/15/backups/base

2. ์•„์นด์ด๋ธŒ ๋ฐฑ์—… ์„ค์ •

# archive ํด๋” ์ƒ์„ฑ
mkdir -p /var/lib/pgsql/15/archive

# postgresql.conf ์„ค์ •
vi /var/lib/pgsql/15/data/postgresql.conf

wal_level = replica
archive_mode = on
archive_command = 'test ! -f /var/lib/pgsql/15/archive/%f && cp %p /var/lib/pgsql/15/archive/%f'
archive_timeout = 60

# postgresql ์„œ๋น„์Šค ์žฌ์‹œ์ž‘
sudo systemctl restart postgresql-15

# archive_command๊ฐ€ ์ •์ƒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ
psql -c "select pg_switch_wal();"

# ์•„์นด์ด๋ธŒ ๋””๋ ‰ํ„ฐ๋ฆฌ ํ™•์ธ
ls -l /var/lib/pgsql/15/archive

# ์•„์นด์ด๋ธŒ 7์ผ ์ด์ƒ๋œ wal ๋ฐ ๋ฐฑ์—… ํŒŒ์ผ ์‚ญ์ œ ์Šคํฌ๋ฆฝํŠธ ์„ค์ •
vi /usr/local/bin/pg_archive_cleanup.sh

--------------------------------------------------------------------
#!/bin/bash
ARCHIVE_DIR="/var/lib/pgsql/15/archive"
RETENTION_DAYS=7

# ์˜ค๋ž˜๋œ WAL ํŒŒ์ผ ์‚ญ์ œ
find $ARCHIVE_DIR -type f -name "*.backup" -mtime +$RETENTION_DAYS -delete
find $ARCHIVE_DIR -type f -name "0000*" -mtime +$RETENTION_DAYS -delete

# ๋””์Šคํฌ ๊ณต๊ฐ„ ํ™•์ธ
df -h $ARCHIVE_DIR
--------------------------------------------------------------------

# ๊ถŒํ•œ ์„ค์ •
sudo chmod +x /usr/local/bin/pg_archive_cleanup.sh

# ํฌ๋ก ์žก ์„ค์ •
sudo crontab -u postgres -e

# ๋งค์ผ ์ƒˆ๋ฒฝ 2์‹œ ์‹คํ–‰
0 2 * * * /usr/local/bin/pg_archive_cleanup.sh >> /var/log/pg_archive_cleanup.log 2>&1

# ๋กœ๊ทธ ํŒŒ์ผ ์ƒ์„ฑ
touch /var/log/pg_archive_cleanup.log
chown postgres.postgres /var/log/pg_archive_cleanup.log

3. ์•„์นด์ด๋ธŒ ๋ณต๊ตฌ

# DB ์ ‘์†
psql

# ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
CREATE TABLE test_table (id SERIAL, data TEXT);
INSERT INTO test_table (data) VALUES ('test data');

# ์ˆ˜๋™ wal ์ „ํ™˜
SELECT pg_switch_wal();
# ์ „ํ™˜ํ•œ wal ํŒŒ์ผ ์ด๋ฆ„ ์กฐํšŒ (/var/lib/pgsql/15/archive ์ด ๊ฒฝ๋กœ์—์„œ ํ™•์ธ๊ฐ€๋Šฅ)
SELECT pg_walfile_name(pg_switch_wal());

# postgresql ์„œ๋ฒ„ ์ข…๋ฃŒ
sudo systemctl stop postgresql-15

# ๊ธฐ์กด ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ ์ œ๊ฑฐ ๋ฐ ๋ฐฑ์—… ๋ณต์‚ฌ
mv /var/lib/pgsql/15/data /var/lib/pgsql/15/data_old
cp -rp /var/lib/pgsql/15/backups/base /var/lib/pgsql/15/data
chown -R postgres.postgres /var/lib/pgsql/15/data

# ๋ฒ ์ด์Šค ๋ฐฑ์—… ๋ฐ›์•˜๋˜ ์‹œ์ ์ด๋ž‘ ์„ค์ •์ด ๋ณ€๊ฒฝ๋œ๊ฑฐ ์žˆ์œผ๋ฉด ๋™์ผํ•˜๊ฒŒ ๋งž์ถ”๊ธฐ
vi /var/lib/pgsql/15/data/postgresql.conf
vi /var/lib/pgsql/15/data/pg_hba.conf

# ๋ณต๊ตฌ ์ปค๋งจ๋“œ ์ ์šฉ
vi /var/lib/pgsql/15/data/postgresql.conf
##################################################################
restore_command = 'cp /var/lib/pgsql/15/archive/%f %p'
##################################################################

# ๋ณต๊ตฌ ์‹ ํ˜ธ ํŒŒ์ผ ์ƒ์„ฑ (๋ณต๊ตฌ ํ›„์— ์ž๋™ ์‚ญ์ œ๋จ)
touch /var/lib/pgsql/15/data/recovery.signal

# ํŠน์ • ์‹œ์ ๊นŒ์ง€ ๋ณต๊ตฌํ•˜๋ ค๋ฉด postgresql.conf์— recovery_target_time ์„ค์ •
# ์ œ์ผ ์ตœ์‹ ๊นŒ์ง€ ๋ณต๊ตฌํ•˜๋ ค๋ฉด recovery_target_time ์„ค์ • X
vi /var/lib/pgsql/15/data/postgresql.conf
recovery_target_time = '2025-06-03 14:00:00'

# postgresql ์„œ๋ฒ„ ์‹œ์ž‘
sudo systemctl start postgresql-15

# ๋กœ๊ทธ ํ™•์ธ(/var/lib/pgsql/15/data/log/{์˜ค๋Š˜ ์š”์ผ ๋กœ๊ทธ})
database system is ready to accept connections

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ