introduzione
In questo articolo, esamineremo come eseguire il backup di più database MySQL o MariaDB che si trovano sullo stesso computer utilizzando uno script bash personalizzato e l'impostazione di un processo cron.
Database Backup
Supponiamo di avere tre database MySQL sulla nostra istanza Vultr denominati db-vultr-site , db-vultr-blog , db-vultr-app (Non preoccuparti di creare questi database, sarai in grado di sostituire i loro nomi per i tuoi sono stati utilizzati nello script al passaggio 2 di seguito) .
-
Accedere al database MySQL o MariaDB ed eseguire la query sottostante per creare un utente del database db_user_backupsper gestire i backup
GRANT LOCK TABLES, SELECT, SHOW VIEW, REPLICATION CLIENT ON *.* TO 'db_user_backups'@'%' IDENTIFIED BY '{COMPLEX-PASSWORD}';
Eseguire anche di seguito per assicurarsi che MySQL sia configurato per ripristinare correttamente le stored procedure
SET GLOBAL log_bin_trust_function_creators = 1;
-
Configurare necessariamente la struttura della directory e i file necessari
# 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
-
Apri db-backup.sh nano /backups/db-backup.she incolla il codice sottostante al suo interno, quindi salva il file (Ctrl + X -> Y -> premi Invio) .
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
Il codice sopra riportato scorre ciclicamente un array con il nome (i) del database (s) che si desidera eseguire il backup e farlo.
Cronjob Setup
Imposta un cronjob per l'esecuzione ogni mezzanotte che esegue lo script di backup e salva il risultato / output nel registro di backup.
-
Apri crontab
crontab -e
-
Aggiungi sotto la voce a crontab
0 0 * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Nota: durante il test è possibile impostare cronjob in modo che venga eseguito ogni 1 minuto anziché come di seguito
* * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
-OPPURE- ogni 5 minuti (sostituire 5 con il numero di minuti desiderato)
*/5 * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Qual è il prossimo
Probabilmente non vorrai i tuoi backup sullo stesso server che eseguono i tuoi database, ma invece su un server in una diversa posizione geografica. Esistono diversi modi per farlo, che vanno dall'uso di SFTP, all'uso di strumenti personalizzati forniti dalla miriade di provider di cloud storage disponibili. Una buona alternativa è Rsync come spiegato qui - vultr.com/docs/setup-file-mirroring-using-rsync-in-debian-ubuntu
Scritto da Lami Adabonyan