Uvod
U ovom zapisu ćemo proći kroz kako napraviti sigurnosnu kopiju više MySQL ili MariaDB baza podataka koje se nalaze na istom stroju koristeći prilagođenu bash skriptu i postavljanje cron posla.
Sigurnosna kopija(e) baze podataka
Pretpostavit ćemo da imamo tri MySQL baze podataka na našoj Vultr instanci pod nazivom db-vultr-site , db-vultr-blog , db-vultr-app (Ne brinite o stvaranju ovih baza podataka, moći ćete zamijeniti njihova imena za vaše gdje se koriste u skripti u koraku 2 u nastavku) .
Prijavite se na svoju MySQL ili MariaDB bazu podataka i pokrenite upit ispod da biste stvorili korisnika baze podataka db_user_backupsza rukovanje sigurnosnim kopijama
GRANT LOCK TABLES, SELECT, SHOW VIEW, REPLICATION CLIENT ON *.* TO 'db_user_backups'@'%' IDENTIFIED BY '{COMPLEX-PASSWORD}';
Također pokrenite dolje kako biste bili sigurni da je MySQL konfiguriran za ispravno vraćanje pohranjenih procedura
SET GLOBAL log_bin_trust_function_creators = 1;
Postavite nužnu strukturu direktorija i potrebne datoteke
# 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
Otvorite db-backup.sh nano /backups/db-backup.shi zalijepite donji kod unutar njega, a zatim spremite datoteku (Ctrl+X -> Y -> pritisnite 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
Gornji kod se vrti kroz niz s imenima baze podataka koje želite sigurnosno kopirati i to čini.
Postavljanje Cronjoba
Postavite cronjob za pokretanje svake ponoći koji pokreće skriptu za sigurnosnu kopiju i sprema rezultat/izlaz u zapisnik sigurnosne kopije.
Otvorite crontab
crontab -e
Dodajte donji unos u crontab
0 0 * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Napomena: Tijekom testiranja možete postaviti cronjob da radi svake 1 minute umjesto kao dolje
* * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
-ILI- svakih 5 minuta (zamijenite 5 s brojem minuta koji želite)
*/5 * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log
Što je sljedeće
Vjerojatno nećete željeti da vaše sigurnosne kopije budu na istim poslužiteljima na kojima se izvodi vaša baza podataka, već umjesto toga na poslužitelju na drugom geografskom mjestu. Postoji nekoliko načina za to, u rasponu od korištenja SFTP-a do korištenja prilagođenih alata koje nudi bezbroj pružatelja usluga pohrane u oblaku koji su dostupni. Jedna dobra alternativa je Rsync kako je ovdje objašnjeno - vultr.com/docs/setup-file-mirroring-using-rsync-in-debian-ubuntu
Napisala Lami Adabonyan