Εισαγωγή
Σε αυτήν τη σύνταξη, θα δούμε πώς μπορείτε να δημιουργήσετε αντίγραφα ασφαλείας πολλών βάσεων δεδομένων MySQL ή MariaDB που βρίσκονται στον ίδιο υπολογιστή χρησιμοποιώντας ένα προσαρμοσμένο σενάριο bash και ρυθμίζοντας μια εργασία cron.
Αντίγραφα ασφαλείας βάσεων δεδομένων
Θα υποθέσουμε ότι έχουμε τρεις βάσεις δεδομένων MySQL στο στιγμιότυπο Vultr που ονομάζονται db-vultr-site , db-vultr-blog , db-vultr-app (Μην ανησυχείτε για τη δημιουργία αυτών των βάσεων δεδομένων, θα μπορείτε να αντικαταστήσετε τα ονόματά τους για το δικό σας όπου χρησιμοποιούνται στο σενάριο στο Βήμα 2 παρακάτω) .
Συνδεθείτε στη βάση δεδομένων MySQL ή MariaDB και εκτελέστε το παρακάτω ερώτημα για να δημιουργήσετε έναν χρήστη βάσης δεδομένων db_user_backupsγια τη διαχείριση αντιγράφων ασφαλείας
GRANT LOCK TABLES, SELECT, SHOW VIEW, REPLICATION CLIENT ON *.* TO 'db_user_backups'@'%' IDENTIFIED BY '{COMPLEX-PASSWORD}';
Εκτελέστε επίσης παρακάτω για να βεβαιωθείτε ότι η MySQL έχει ρυθμιστεί ώστε να επαναφέρει σωστά τις αποθηκευμένες διαδικασίες
SET GLOBAL log_bin_trust_function_creators = 1;
Ρυθμίστε την απαραίτητα δομή καταλόγου και τα αρχεία που χρειάζονται
# create backup directory with environment and log file
sudo mkdir /backups && cd /backups
sudo touch .env db-backup.sh db-backup.log
sudo chmod -R 775 /backups
sudo chmod -R g+s /backups
sudo chmod +x db-backup.sh
# add mysql backup user credentials into environment file
echo "export MYSQL_USER=db_user_backups" > /backups/.env
echo "export MYSQL_PASS={COMPLEX-PASSWORD}" >> /backups/.env
Ανοίξτε το db-backup.sh nano /backups/db-backup.shκαι επικολλήστε τον κώδικα από κάτω μέσα σε αυτό και, στη συνέχεια, αποθηκεύστε το αρχείο (Ctrl+X -> Y -> πατήστε Enter) .
DB_NAMES=( 'db-vultr-site' 'db-vultr-blog' 'db-vultr-app' ) #replace with your own database name(s)
BKUP_NAMES=()
BKUP_DIR="/backups"
# get total number of directories
total_dbs=${#DB_NAMES[@]}
# create backup file names
for (( i=0; i<${total_dbs}; i++ )); do
BKUP_NAMES[$i]="`date +%Y%m%d%H%M`-backup-$${DB_NAMES[$i]}.sql.gz"
done
# get backup users credentials
source $BKUP_DIR/.env
# create backups
for (( i=0; i<${total_dbs}; i++ )); do
# NOTE: --routines flag makes sure stored procedures are also backed up
mysqldump --routines -u ${MYSQL_USER} -p${MYSQL_PASS} | gzip > ${BKUP_DIR}/${BKUP_NAMES[$i]}
done
Ο παραπάνω κώδικας περιστρέφεται μέσω ενός πίνακα με τα ονόματα των βάσεων δεδομένων που θέλετε να δημιουργήσετε αντίγραφα ασφαλείας και το κάνετε.
Ρύθμιση Cronjob
Ρυθμίστε ένα cronjob για εκτέλεση κάθε μεσάνυχτα που εκτελεί το σενάριο δημιουργίας αντιγράφων ασφαλείας και αποθηκεύει το αποτέλεσμα/την έξοδο στο αρχείο καταγραφής αντιγράφων ασφαλείας.
Ανοίξτε το ρολόι
crontab -e
Προσθέστε παρακάτω την καταχώριση στο crontab
0 0 * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Σημείωση: Κατά τη διάρκεια της δοκιμής, μπορείτε να ρυθμίσετε το cronjob να εκτελείται κάθε 1 λεπτό αντί όπως παρακάτω
* * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
-Ή- κάθε 5 λεπτά (αντικαταστήστε τα 5 με τον αριθμό των λεπτών που θέλετε)
*/5 * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Τι έπεται
Πιθανότατα δεν θα θέλετε τα αντίγραφα ασφαλείας σας στους ίδιους διακομιστές που εκτελούν τις βάσεις δεδομένων σας, αλλά σε έναν διακομιστή σε διαφορετική γεωγραφική τοποθεσία. Υπάρχουν διάφοροι τρόποι για να το κάνετε αυτό, που κυμαίνονται από τη χρήση SFTP έως τη χρήση προσαρμοσμένων εργαλείων που παρέχονται από τους μυριάδες παρόχους αποθήκευσης cloud που είναι διαθέσιμοι εκεί έξω. Μια καλή εναλλακτική είναι το Rsync όπως εξηγείται εδώ - vultr.com/docs/setup-file-mirroring-using-rsync-in-debian-ubuntu
Σε σενάριο Lami Adabonyan