Jak nastavit zálohování všech databází z MySQL
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