α) backup(mysqldump) της βάσης δεδομένων σε προκαθορισμένους χρόνους κάθε μέρα για 7 ημέρες
β) συμπίεση της βάσης με gzip -9 όπου σε κάθε αρχείο θα προστίθεται και η ημερομηνία στο τέλος του ονόματος
γ) την 7η ημέρα διαγραφή αυτών και νέα backup για τις επόμενες 7 ημέρες κοκ
δ) αποστολή με email στον email λογαριασμό σας ο κατάλογος των αποθηκευμένων αρχείων καθημερινά για έλεγχο με το μάτι οτι όλα πήγαν καλά (θα εμφανίζεται το όνομα, το μέγεθος και η ημερομηνία δημιουργίας του backup)
για λόγους ευκολίας στην ανάγνωση του οδηγού θα χρησιμοποιήσω τα παρακάτω δεδομένα:
- Κώδικας: Επιλογή όλων
ubuntu server user=username
ubuntu server username password=password
domain=site.gr
database name=site
mysql user=aaaaaaa
mysql aaaaaaa password=xxxxxx
email username=papaki
email password=pass
κατ'αρχάς προσθέτουμε τα πακέτα για να μπορεί ο server να στέλνει emails σε εμάς
- Κώδικας: Επιλογή όλων
sudo apt-get install sendemail libio-socket-ssl-perl libnet-ssleay-perl
τώρα πρέπει να δημιουργήσουμε ένα απλό χρήστη για τη βάση ο οποίος θα έχει δικαιώματα μόνο ανάγνωσης αυτής για λόγους ασφαλείας.
μπαίνουμε στη σελίδα μας site.gr/phpmyadmin ως root (αν δεν έχουμε το πακέτο phpmyadmin το εγκαθιστούμε)
και πατάμε στο tab Privileges>add a new user στο παράθυρο που θα εμφανiστεί βάζουμε username=aaaaaaa - password=xxxxxx και πιο κατω στο Global privileges τικάρουμε μόνο το SELECT και αποθήκευση, κλείνουμε το tab του browser δεν θα το χρειαστούμε άλλο ανοιχτό.
Στο server τώρα, να φτιάξουμε ένα configuration αρχείο κρυφό που θα έχει μέσα τον κωδικό και το όνομα του χρήστη της βάσης mysql ώστε σε κάθε τρέξιμο του script να μη ζητάει τα credentials αλλιώς είναι αδύνατον ο cron να κάνει mysqldump,
- Κώδικας: Επιλογή όλων
cd /home/username
sudo nano .my.cnf
και προσθέτουμε μέσα στο αρχέιο
- Κώδικας: Επιλογή όλων
[client]
user=aaaaaaa
password=xxxxxx
[mysqldump]
user=aaaaaaa
password=xxxxxx
και δίνουμε και το παρακάτω ώστε να μην έχει άλλος δικαιώματα στο αρχέιο
- Κώδικας: Επιλογή όλων
sudo chmod 400 .my.cnf
Τώρα δημιουργούμε το φάκελο που θα μπαίνουν τα backup μέσα και τα δύο εκτελέσιμα που θα κάνει το backup και το εβδομαδιαίο σβήσιμο του φακέλου για να μη γεμίζει.
- Κώδικας: Επιλογή όλων
sudo mkdir backup
cd backup
sudo mkdir databases
δίνουμε
- Κώδικας: Επιλογή όλων
sudo nano db-site
και βάζουμε μέσα
- Κώδικας: Επιλογή όλων
#!/bin/bash
cd /home/username/backup/databases
DATE=$(date +"%d-%m-%Y_%H:%M")
/usr/bin/mysqldump --defaults-file=/home/username/.my.cnf --single-transaction -h localhost site | gzip -9 > site.sql_$DATE.gz
ls -l -h -S | awk '{print $5, $6, $7, $9}' > print-db.txt
sendEmail -f papaki@gmail.com -t papaki@gmail.com -u "site.gr database backup DONE!" < print-db.txt -s smtp.gmail.com:25 -xu papaki -xp pass
- Κώδικας: Επιλογή όλων
sudo nano remove-old-databases
και βάζουμε μέσα
- Κώδικας: Επιλογή όλων
#!/bin/bash
rm /home/username/backup/databases/*
εκτελέσιμα με
- Κώδικας: Επιλογή όλων
sudo chmod +x db-site
sudo chmod +x remove-old-databases
για να εκτελείται το backup κάθε μέρα ανοίγουμε το cron
- Κώδικας: Επιλογή όλων
sudo crontab -e
και βάζουμε αυτα στο τέλος
- Κώδικας: Επιλογή όλων
# εδώ κάνει backup τις βάσεις δεδομένων
05 04 * * * /home/username/backup/db-site
# εδώ μια φορά την εβδομάδα κάνει remove τις παλιές βάσεις δεδομένων
00 04 * * 0 /home/username/backup/remove-old-databases
τέλος, αυτό ήταν, το πρωί θα έρθει ένα email, το ανοίγουμε να δουμε οτι ολα πήγαν καλά
Η εργασία υπάγεται στην άδεια Creative Commons Αναφορά-Παρόμοια διανομή 3.0 Ελλάδα