Introducció
En aquest escrit, explicarem com fer una còpia de seguretat de diverses bases de dades MySQL o MariaDB que es troben a la mateixa màquina mitjançant un script bash personalitzat i configurant un treball cron.
Còpia de seguretat de bases de dades
Suposarem que tenim tres bases de dades MySQL a la nostra instància de Vultr anomenades db-vultr-site , db-vultr-blog , db-vultr-app (no us preocupeu per crear aquestes bases de dades, podreu substituir-ne els noms). per al vostre, on s'utilitzen a l'script del pas 2 a continuació) .
Inicieu sessió a la vostra base de dades MySQL o MariaDB i executeu la consulta a continuació per crear un usuari de base de dades db_user_backupsper gestionar les còpies de seguretat
GRANT LOCK TABLES, SELECT, SHOW VIEW, REPLICATION CLIENT ON *.* TO 'db_user_backups'@'%' IDENTIFIED BY '{COMPLEX-PASSWORD}';
Executeu també a continuació per assegurar-vos que MySQL està configurat per restaurar correctament els procediments emmagatzemats
SET GLOBAL log_bin_trust_function_creators = 1;
Configureu l'estructura de directoris i els fitxers necessaris
# 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
Obriu db-backup.sh nano /backups/db-backup.shi enganxeu el codi que hi ha a continuació i deseu el fitxer (Ctrl+X -> Y -> premeu 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
El codi anterior està passant per una matriu amb els noms de les bases de dades de les quals voleu fer una còpia de seguretat i ho fa.
Configuració de cronjob
Configureu un cronjob per executar-se cada mitjanit que executi l'script de còpia de seguretat i desi el resultat/sortida al registre de còpia de seguretat.
Obre crontab
crontab -e
Afegeix l'entrada a continuació a crontab
0 0 * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Nota: durant la prova, podeu configurar cronjob perquè s'executi cada 1 minut, com a continuació
* * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
-O- cada 5 minuts (substituïu 5 pel nombre de minuts que vulgueu)
*/5 * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Que segueix
Probablement no voldreu que les vostres còpies de seguretat siguin al mateix servidor que executin la vostra base de dades, sinó en un servidor en una ubicació geogràfica diferent. Hi ha diverses maneres de fer-ho, que van des de l'ús d'SFTP fins a l'ús d'eines personalitzades proporcionades per la infinitat de proveïdors d'emmagatzematge en núvol disponibles. Una bona alternativa és Rsync, tal com s'explica aquí: vultr.com/docs/setup-file-mirroring-using-rsync-in-debian-ubuntu
Escrit per Lami Adabonyan