డేటాబేస్ బ్యాకప్లు
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 జోడించండి |
వేర్వేరు ప్రదేశాలలో కనీసం రెండు కాపీలను ఉంచండి మరియు డంప్ పరిమాణాన్ని పర్యవేక్షించండి: పరిమాణంలో పదునైన తగ్గుదల అంటే మొత్తం డేటాబేస్ డంప్ చేయలేదని అర్థం.