27 lines
1.8 KiB
Bash
Executable File
27 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# تدریسینو: آزمونِ بازیابی از بکاپِ رمزشده (ماهی یک بار، دستی: sudo -u postgres tadrisino-restore-check).
|
|
# آخرین بکاپ + همهی WALِ آرشیوشده را در پوشهی موقت بازیابی میکند، Postgresِ موقت را روی سوکتِ همان پوشه (بیپورتِ شبکه،
|
|
# archive_mode=off تا چیزی به مخزن ننویسد) بالا میآورد، شمارشها را کنارِ دیتابیسِ اصلی چاپ میکند و همه را پاک میکند.
|
|
set -euo pipefail
|
|
BIN=/usr/lib/postgresql/16/bin
|
|
work=$(mktemp -d /var/lib/postgresql/restore-check.XXXXXX)
|
|
trap '"$BIN/pg_ctl" -D "$work/data" -m immediate stop >/dev/null 2>&1 || true; rm -rf "$work"' EXIT
|
|
pgbackrest --stanza=zareian --pg1-path="$work/data" --type=default --archive-mode=off restore --log-level-console=warn
|
|
cat > "$work/data/postgresql.conf" <<CONF
|
|
listen_addresses = ''
|
|
port = 5499
|
|
unix_socket_directories = '$work'
|
|
archive_mode = off
|
|
shared_buffers = 128MB
|
|
CONF
|
|
echo 'local all all peer' > "$work/data/pg_hba.conf"
|
|
"$BIN/pg_ctl" -D "$work/data" -l "$work/log" -w -t 600 start >/dev/null
|
|
for _ in $(seq 120); do
|
|
[ "$(psql -h "$work" -p 5499 -d zareian_mathapp -Atc 'select pg_is_in_recovery()')" = f ] && break; sleep 1
|
|
done
|
|
Q="select 'users', count(*) from accounts_user union all select 'questions', count(*) from content_question
|
|
union all select 'orders', count(*) from payment_order union all select 'payment_events', count(*) from payment_paymentevent
|
|
union all select 'login_events', count(*) from accounts_loginevent"
|
|
echo "restored | live"
|
|
paste -d'|' <(psql -h "$work" -p 5499 -d zareian_mathapp -Atc "$Q") <(psql -p 5440 -d zareian_mathapp -Atc "$Q" | cut -d'|' -f2)
|