يلتقط هذا السكربت عنقود PostgreSQL كاملاً في ملف واحد مضغوط بختم زمني. وخلافاً لـ pg_dump، يصدّر pg_dumpall ليس فقط كل قاعدة بيانات بل أيضاً الكائنات على مستوى العنقود مثل الأدوار ومساحات الجداول والصلاحيات، مما يجعله الأداة الصحيحة لنسخة استعادة كوارث شاملة. بعد set -euo pipefail ومعالجة الوسائط، يتحقق من تثبيت pg_dumpall، ويبني مسار إخراج بختم زمني، ويمرّر النسخة عبر gzip. تعتمد المصادقة عمداً على ~/.pgpass أو المصادقة من نوع peer بدلاً من تضمين كلمة مرور، مما يبقي الأسرار خارج السكربت وقائمة العمليات. الدور المتصل افتراضياً هو postgres. شغّله هكذا: ./pg_backup.sh /backups/postgres. للاستعادة استخدم: gunzip -c file.sql.gz | psql -U postgres.
نسخ احتياطي لكل قواعد بيانات PostgreSQL باستخدام pg_dumpall
يُفرغ عنقود PostgreSQL كاملاً، مع الأدوار، في ملف مضغوط واحد.
3 مشاهدة
مشاركة
السكربت
تحميل .shbash
#!/usr/bin/env bash
#
# pg_backup.sh - Full cluster backup of all PostgreSQL databases and globals.
#
# pg_dumpall captures every database plus cluster-wide objects (roles,
# tablespaces). Output is compressed and timestamped.
#
# Usage: ./pg_backup.sh <output_dir> [pg_user]
#
# Authentication: relies on ~/.pgpass or peer auth. Never hard-code passwords.
#
set -euo pipefail
# --- Argument handling --------------------------------------------------------
if [[ $# -lt 1 || $# -gt 2 ]]; then
echo "Usage: $0 <output_dir> [pg_user]" >&2
exit 1
fi
OUT_DIR="$1"
PG_USER="${2:-postgres}"
command -v pg_dumpall >/dev/null 2>&1 || { echo "Error: pg_dumpall not found." >&2; exit 1; }
mkdir -p "$OUT_DIR"
TIMESTAMP="$(date +%Y%m%d-%H%M%S)"
OUTFILE="${OUT_DIR%/}/pg_cluster-${TIMESTAMP}.sql.gz"
# --- Dump the whole cluster ---------------------------------------------------
# -U sets the role; pg_dumpall includes roles and tablespaces by default.
echo "Backing up PostgreSQL cluster as user '$PG_USER' -> $OUTFILE"
pg_dumpall -U "$PG_USER" | gzip -c > "$OUTFILE"
echo "Done. Size: $(du -h "$OUTFILE" | cut -f1)"كيفية التشغيل
راجع السكربت أولاً، ثم حمّله أو انسخه وشغّله في بيئتك.
قد يعجبك أيضاً
bashlinuxمتوسط
مزامنة مجلد إلى مضيف بعيد عبر rsync فوق SSH
يطابق مجلداً محلياً مع خادم بعيد بأمان عبر SSH.
bashlinuxمتوسط
نسخ احتياطي لكل قواعد بيانات MySQL باستخدام mysqldump
يُفرغ كل قاعدة بيانات MySQL في ملف SQL مضغوط مستقل.
bashlinuxمتوسط
إعادة تسمية الملفات بالجملة وفق نمط
يعيد تسمية ملفات كثيرة دفعة واحدة عبر استبدال sed مع معاينة آمنة.