Backup wszystkich baz MySQL w osobnych plikach.

Kiedy mamy wiele baz danych nie zawsze chcemy robić jeden duży dump, który często może zajmować nawet kilkanaście GB. Lepiej go podzielić na poszczególne bazy. Czasem przecież chcemy odzyskać tylko jedną z wielu a nie cały serwer MySQL. Co w takim przypadku nie jest niemożliwe, ale co najmniej problematyczne.

Dzisiaj stworzymy sobie uniwersalny skrypt mysqldumper.sh,  który możemy uruchamiać z crona lub jako pre-backup w dowolnym programie backupowym  (na przykład w naszym skrypcie restic).

Otwieramy zatem nasz plik mysqldumper.sh i wklejamy zawartość:

#!/bin/bash 


USER="root"
BACKUP_PATH="/root/backups/sql"

mkdir -p  $BACKUP_PATH

databases=`mysql -u $USER -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`

for db in $databases; do
  if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then
    #mysqldump -u $USER --force --opt --databases $db | gzip > $BACKUP_PATH/$db.sql.gz
    mysqldump -u $USER --force --opt --databases $db > $BACKUP_PATH/$db.sql
   	echo $db
  fi
done

następnie nadajemy mu odpowiednie uprawnienia

chmod 700 /root/bin/mysqldumper.sh

W powyższym skrypcie nie ma hasła, ponieważ logujemy się do bazy naszym plikiem .my.cnf z wpisu Logowanie do MySQL bez hasła. Celowo też jest zakomentowana linijka z gzip. możesz ją od komentować jeśli chcesz dodatkowo gzipować dumpy. My jednak tego nie chcemy – surowe dampy będą się dobrze deduplikować przy pomocy Restic,  który też załatwi mam kwestię wersjonowania (brak daty w plikach backupu).

 

Written by IQhost