Skip to content
VDS · ڈیٹا بیس

ڈیٹا بیس بیک اپس

MySQL اور PostgreSQL ڈمپس کا شیڈول کیسے بنائیں، انہیں مشین سے باہر کیسے منتقل کریں، اور تصدیق کریں کہ بیک اپ واقعی ری اسٹور ہوتا ہے۔

اپ ڈیٹ 23 اگست، 2026

VPS کے ساتھ خودکار مشین بیک اپ یا اسٹیٹ اسنیپ شاٹس نہیں آتے: جو کچھ آپ نے خود کاپی نہیں کیا وہ صرف ایک ہی انسٹینس میں موجود ہوتا ہے۔ ڈیٹا بیس ڈمپ سب سے پہلے سیٹ اپ کرنے والی چیز ہے، کیونکہ ڈیٹا بحال کرنے کے لیے کوئی جگہ نہیں ہوتی، جبکہ سائٹ کو شروع سے دوبارہ ڈیپلائے کیا جا سکتا ہے۔

دستی ڈمپ

PostgreSQL:

pg_dump -Fc -U shop -h 127.0.0.1 shop > /srv/backups/shop-$(date +%F).dump
pg_dumpall -U postgres --roles-only > /srv/backups/roles.sql

MySQL اور MariaDB:

mysqldump --single-transaction --quick --routines --events \
  -u root shop | gzip > /srv/backups/shop-$(date +%F).sql.gz

--single-transaction ٹیبلز کو لاک کیے بغیر مستقل InnoDB ڈمپ لیتا ہے — اس کے بغیر، ایکسپورٹ کے دوران آپ کی سائٹ رک جائے گی۔ PostgreSQL کا -Fc فارمیٹ کمپریسڈ ہوتا ہے اور آپ کو انفرادی ٹیبلز بحال کرنے دیتا ہے۔

پاس ورڈ کمانڈ لائن پر نہ رکھیں: 600 پرمیشنز کے ساتھ ~/.pgpass یا ~/.my.cnf بنائیں۔

شیڈول شدہ

mkdir -p /srv/backups && chmod 700 /srv/backups
crontab -e
20 3 * * * /usr/local/bin/db-backup.sh >> /var/log/db-backup.log 2>&1

/usr/local/bin/db-backup.sh اسکرپٹ:

#!/bin/bash
set -euo pipefail
DEST=/srv/backups
STAMP=$(date +%F-%H%M)
pg_dump -Fc -U shop -h 127.0.0.1 shop > "$DEST/shop-$STAMP.dump.tmp"
mv "$DEST/shop-$STAMP.dump.tmp" "$DEST/shop-$STAMP.dump"
find "$DEST" -name '*.dump' -mtime +14 -delete

عارضی فائل میں لکھ کر پھر اس کا نام تبدیل کرنا اہم ہے: اگر ڈمپ درمیان میں رک جائے، تو آپ کٹی ہوئی فائل کو مکمل بیک اپ نہیں سمجھیں گے۔ set -euo pipefail پہلی خرابی پر اسکرپٹ روک دیتا ہے بجائے خاموشی سے جاری رہنے کے۔

بیک اپ کو مشین سے باہر منتقل کریں

اسی ڈسک پر کاپی آپ کو مائیگریشن کی غلطی، رینسم ویئر، یا "Access" ٹیب پر OS دوبارہ انسٹال کرنے سے نہیں بچائے گی۔ ڈمپ آف سائٹ بھیجیں:

rsync -az --delete /srv/backups/ backup@other-host:/store/vds/

یا rclone کے ذریعے کسی بھی S3-کمپیٹیبل اسٹوریج پر۔ ذہن میں رکھیں کہ بینڈوڈتھ 500 Mbit/s تک اور فی ٹیئر ڈسک رائٹ کی حد: 60 MB/s فی کور۔

بحالی کی جانچ

وہ بیک اپ جو آپ نے کبھی بحال نہ کیا ہو، بیک اپ نہیں ہوتا۔

createdb -U postgres shop_check
pg_restore -U postgres -d shop_check /srv/backups/shop-2026-08-23.dump
psql -U postgres -d shop_check -c "SELECT count(*) FROM users;"
dropdb -U postgres shop_check

MySQL کے لیے: gunzip -c dump.sql.gz | mysql -u root shop_check۔

یہ مہینے میں ایک بار کریں اور جانچ کی تاریخ ریکارڈ کریں۔

عام غلطیاں

علامتوجہ
ڈمپ صرف چند کلو بائٹس کا ہےاسکرپٹ آتھنٹیکیشن پر ناکام ہو گیا، اور خرابی /dev/null میں چلی گئی
ڈسک کی جگہ ختم ہو گئیmtime کے مطابق پرانے بیک اپ ڈیلیٹ نہ ہونا
بحالی پرمیشنز پر ناکام ہوتی ہےرولز ڈمپ نہیں ہوئے — آپ کو --roles-only درکار ہے
Cron خاموش ہے، کوئی بیک اپ نہیںCron کے پاس آپ کا PATH نہیں ہوتا — مطلق پاتھ استعمال کریں
رات کو سائٹ سست ہو جاتی ہےڈمپ ڈسک کے لیے مقابلہ کرتا ہے — وقت بدلیں، --quick شامل کریں

مختلف مقامات پر کم از کم دو کاپیاں رکھیں اور ڈمپ کے سائز کی نگرانی کریں: سائز میں تیزی سے کمی کا مطلب ہے کہ پورا ڈیٹا بیس ڈمپ نہیں ہوا۔