Prezantimi
Në këtë shkrim, ne do të shqyrtojmë se si të kopjoni bazat e të dhënave të shumta MySQL ose MariaDB që qëndrojnë në të njëjtën makinë duke përdorur një skript të personalizuar bash dhe duke vendosur një punë të cron.
Rezervimi i bazës së të dhënave
Ne do të supozojmë se kemi tre baza të dhënash MySQL në shembullin tonë Vultr të quajtura db-vultr-site , db-vultr-blog , db-vultr-app (Mos u shqetësoni për krijimin e këtyre bazave të të dhënave, ju do të jeni në gjendje t'i zëvendësoni emrat e tyre për tuajat ku janë përdorur në skriptin në Hapin 2 më poshtë) .
Hyni në bazën tuaj të të dhënave MySQL ose MariaDB dhe ekzekutoni pyetjen më poshtë për të krijuar një përdorues të bazës së të dhënave db_user_backupspër të trajtuar kopjet rezervë
GRANT LOCK TABLES, SELECT, SHOW VIEW, REPLICATION CLIENT ON *.* TO 'db_user_backups'@'%' IDENTIFIED BY '{COMPLEX-PASSWORD}';
Drejtoni gjithashtu më poshtë për t'u siguruar që MySQL është konfiguruar për të rivendosur siç duhet procedurat e ruajtura
SET GLOBAL log_bin_trust_function_creators = 1;
Vendosni strukturën domosdoshmërisht të drejtorisë dhe skedarët e nevojshëm
# 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
Hapni db-backup.sh nano /backups/db-backup.shdhe ngjisni kodin më poshtë brenda tij, më pas ruajeni skedarin (Ctrl+X -> Y -> shtypni 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
Kodi i mësipërm po qarkullon përmes një grupi me emrat e bazës së të dhënave që dëshironi të rezervoni dhe e bëni këtë.
Konfigurimi i Cronjob
Vendosni një cronjob për të ekzekutuar çdo mesnatë që ekzekuton skriptin rezervë dhe ruan rezultatin/daljen në regjistrin rezervë.
Hap krontabin
crontab -e
Shtoni hyrjen më poshtë në crontab
0 0 * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Shënim: Gjatë testimit, mund të vendosni cronjob të funksionojë çdo 1 minutë në vend të kësaj si më poshtë
* * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
-OR- çdo 5 minuta (zëvendësoni 5 me numrin e minutave që dëshironi)
*/5 * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Ç'pritet më tej
Ju nuk do të dëshironi që rezervat tuaja në të njëjtin server(ët) që ekzekutojnë bazën e të dhënave tuaja, por në vend të kësaj në një server në një vendndodhje të ndryshme gjeografike. Ka disa mënyra për ta bërë këtë, duke filluar nga përdorimi i SFTP, tek përdorimi i mjeteve të personalizuara të ofruara nga një mori ofruesish të ruajtjes së cloud të disponueshëm atje. Një alternativë e mirë është Rsync siç shpjegohet këtu - vultr.com/docs/setup-file-mirroring-using-rsync-in-debian-ubuntu
Shkruar nga Lami Adabonyan