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 जोड़ें

अलग-अलग जगहों पर कम से कम दो कॉपी रखें और डंप साइज़ पर नज़र रखें: साइज़ में तेज़ गिरावट का मतलब है कि पूरा डेटाबेस डंप नहीं हुआ।