Αφού ξόδεψα πάρα πολλές ώρες για να επιμεληθώ και να διορθώσω τα άρθρα του 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