๐๏ธ postgresql 15 ์์นด์ด๋ธ ๋ฐฑ์
/๋ณต๊ตฌ
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
๋๊ธ๋จ๊ธฐ๊ธฐ