Κάνουμε backup το wordpress site μας από το shell

Αφού ξόδεψα πάρα πολλές ώρες για να επιμεληθώ και να διορθώσω τα άρθρα του blog μου που μετέφερα εδώ από το blogger, ήταν σαφές ότι πριν κάνω οτιδήποτε άλλο, έπρεπε να πάρω ένα backup – δεν ήταν μια διαδικασία που θα ήθελα να ξανακάνω, ποτέ!

Backup ολόκληρου του host δεν έχω ενεργοποιημένα, οπότε αυτή η επιλογή δεν υπάρχει. Λίγο ψάξιμο μου εμφάνισε διάφορα wordpress plugins, free και premium που διατείνονται ότι κάνουν αυτή την δουλειά, αλλά δεν με εντυπωσίασαν. Το αντίθετο, μου φάνηκαν όλα κάπως περίπλοκα για αυτό που ήθελα να κάνω.

Είπα λοιπόν να κάνω ένα βήμα πίσω, να το δούμε διαφορετικά το ζήτημα. Τι έχουμε να κάνουμε backup, όσον αφορά το σύστημα;

Το wordpress είναι ένα σύνολο scripts που τρέχει ο web server, ο οποίος συνήθως έχει πρόσβαση μόνο στο /var/www, και η λογική λέει ότι τα δεδομένα του κάθε site θα είναι περιορισμένα στο αντίστοιχο ορισμένο μονοπάτι, του τύπου /var/www/sitepath.

Ο google συμφωνεί, και μαθαίνουμε ότι στο sitepath είναι τα αρχεία του wordpress, και επιπλέον στον φάκελο wp-content αποθηκευονται τα επιπλέον αρχεία, όπως τα θέματα και τα plugins. Δεν έχει σημασία όμως, εμείς θα πάρουμε backup όλη την εγκατάσταση έτσι κι αλλιώς.

Το δεύτερο μέρος που αποθηκεύει δεδομένα το wordpress είναι στην μία βάση της mysql για την οποία έχει τα credentials. Απλό!

Άρα, έχουμε πλάνο! Κάνουμε ένα dump την βάση δεδομένων του site, και κρατάμε ένα αντίγραφο από το φάκελο της εγκατάστασης, και τέλος!

Έγραψα στα γρήγορα λοιπόν το script που παραθέτω παρακάτω, το έτρεξα, και φαίνεται να λειτουργεί. Έκανα και ένα δοκιμαστικο restore του βάσης, και όλα πήγαν καλά!

Για όποιον ενδιαφέρεται το script παρέχεται σαν παράδειγμα, χωρίς καμία απολύτως εγγύηση λειτουργίας ή/και ασφάλειας!

#!/bin/bash

#mysql credentials not provided, running as root to stop/start apache anyway

DB="WPRESSDB"
BACKUP_PATH="/mnt/backup/wpress_bak/"
WWW_PATH="/var/www/"
SITE="mantzouneas.gr"

#get date for timestamp
STAMP=`date +%Y.%m.%d`

DB_BACKUP="${DB}_${STAMP}.sql.gz"
WWW_BACKUP="${SITE}_${STAMP}.tgz"

#create and cd into the backup dir
mkdir -p $BACKUP_PATH
pushd $BACKUP_PATH > /dev/null

if test -f $DB_BACKUP
then
    echo -e "file $DB_BACKUP already exists, exiting\n"
    popd > /dev/null
    exit
fi

if test -f $WWW_BACKUP
then
    echo -e "file $WWW_BACKUP already exists, exiting\n"
    popd > /dev/null
    exit
fi

echo -e "### Stoping Apache\n"
service apache2 stop

echo -e "### Backing up site folder\n"
tar -czf $WWW_BACKUP -C $WWW_PATH $SITE

echo -e "### Backing up database\n"
mysqldump $DB | gzip > $DB_BACKUP

echo -e "### Starting Apache\n"
service apache2 start

echo -e "### Backup Finished\n"
popd > /dev/null

Γράψτε ένα σχόλιο

Η ηλ. διεύθυνση σας δεν δημοσιεύεται.

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει τα ανεπιθύμητα σχόλια. Μάθετε πώς υφίστανται επεξεργασία τα δεδομένα των σχολίων σας.