Σελίδα 1 από 1

αυτόματο backup mysql και email με τον κατάλογο του φακέλου

ΔημοσίευσηΔημοσιεύτηκε: 26 Αύγ 2013, 07:41
από lepidas
Ο παρακάτω οδηγός περιέχει τα εξής και δοκιμάστηκε στο Ubuntu 12.04:

α) 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 License
Η εργασία υπάγεται στην άδεια Creative Commons Αναφορά-Παρόμοια διανομή 3.0 Ελλάδα

Re: αυτόματο backup mysql και email με τον κατάλογο του φακέ

ΔημοσίευσηΔημοσιεύτηκε: 26 Αύγ 2013, 21:13
από the_eye
Πολύ καλό. Ένα backup που πρέπει να τρέχει σε κάθε mysql server !