Jak nastavit zálohování všech databází z MySQL

  Článek jsem zveřejnil 18.10.2020 a zařadil ho do kategorie:  Linux / Server.
Počet shlédnutí: 422

1) Vytvoříme skript 

sudo nano /skripty/zaloha-mysql.sh

2) Vložíme do něj následující obsah a uložíme (ctrl + O), následně ukončíme práci v editoru (ctrl + X)

#!/bin/bash
#----------------------------------------
# NASTAVENÍ
#----------------------------------------
USER='UŽIVATEL'       # MySQL uživatel který má právo zobrazit všechny databáze
PASSWORD='HESLO' # Heslo MySQL uživatele
DAYS_TO_DELETE=20    # Nastavíme kolik dní chceme uchovávat zálohy, 0 znamená nemazat zálohy nikdy  
GZIP=1            # 1 = Compress
BACKUP_PATH='/extdisk/'  # Cíl naší zálohy
#----------------------------------------

# Vytvoř složky k záloze
if [ ! -d $BACKUP_PATH ]; then
  mkdir -p $BACKUP_PATH
fi

# Získej seznam názvu databází
databases=`mysql -u $USER -p$PASSWORD -e "SHOW DATABASES;" | tr -d "|" | grep -v Database`

for db in $databases; do

  if [ $db == 'information_schema' ] || [ $db == 'performance_schema' ] || [ $db == 'mysql' ] || [ $db == 'sys' ]; then
    echo "Skipping database: $db"
    continue
  fi
  
  date=$(date -I)
  if [ "$GZIP" -eq 0 ] ; then
    echo "Backing up database: $db without compression"      
    mysqldump -u $USER -p$PASSWORD --databases $db > $BACKUP_PATH/$date-$db.sql
  else
    echo "Backing up database: $db with compression"
    mysqldump -u $USER -p$PASSWORD --databases $db | gzip -c > $BACKUP_PATH/$date-$db.gz
  fi
done

# Vymaž staré zálohy
if [ "$DAYS_TO_DELETE" -gt 0 ] ; then
  echo "Deleting backups older than $DAYS_TO_DELETE days"
  find $BACKUP_PATH/* -mtime +$DAYS_TO_DELETE -exec rm {} \;
fi

3) Přejdeme do démona

 sudo crontab -e

 4) Pro náš skript vytvoříme naplánovanou úlohu (na konec cronu) a uložíme

@daily sh /skripty/zaloha-mysql.sh >> /var/log/zaloha-mysql.log 2>&1

Hotovo!

Nyní by měla proběhnout záloha každý den (v 00:00) všech Vašich složek (webů)  na Vámi určené místo. 

Pokud by tomu tak nebylo, prosím o informaci z výpisu Vašeho logu. 
Ten naleznete zde :  /var/log/zaloha-mysql.log

Pokud by jste potřebovali svůj specifický čas, období atp. pro své zálohy, doporučuji crontab.guru tato utilita Vám vygeneruje potřebná čísla, které vložíte do cronu místo "@daily" z kroku 5) 

Okamžitý test skriptu můžete provést příkazem -

sudo sh /skripty/zaloha-mysql.sh

  • Facebook
  • Twitter
  • LinkedIn
  • Email
Máte jiný názor? Potřebujete něco dovysvětlit? Napište..
Prosím zdržte se urážek, slovního napadání a dalších píčovin.
Vaše jméno

Váš e-mail

Váš komentář



Tento článek nikdo neokomentoval.