MySQL | MariaDB

Tworzenie usera na potrzeby backupu CLI

Wykonujemy zalogowani do CLI mysql/mariadb jako root

Tworzenie usera pod backup:

CREATE USER 'NazwaUżytkownika'@'localhost' IDENTIFIED BY 'TrudneHasło'; 
GRANT EVENT, LOCK TABLES, SELECT, RELOAD, SHOW VIEW ON *.* TO 'NazwaUżytkownika'@'localhost'; 
FLUSH PRIVILEGES; 

Oraz nadajemy uprawnienia do tworzenia backupu:

GRANT PROCESS ON *.* TO 'NazwaUżytkownika'@'localhost'; 
GRANT LOCK TABLES ON *.* TO 'NazwaUżytkownika'@'localhost'; 
GRANT SHOW VIEW ON *.* TO 'NazwaUżytkownika'@'localhost'; 
FLUSH PRIVILEGES; 

Ustawienia archiwizacji logów transakcyjnych

W MariaDB / MySQL logi transakcyjne nazywane są binlogami i z automatu nie odkładają się na dysk, dlatego by to włączyć musimy z edytować pliki my.cnf / my.ini

Lokalizacja dla MySQL

C:\ProgramData\MySQL\MySQL Server X.Y\my.ini

Lokalizacja dla MariaDB

C:\Program Files\MariaDB X.Y\data\my.ini

W pliku wyszukujemy sekcję: 

# ***** Group Replication Related ***** 
# Specifies the base name to use for binary log files. With binary logging 
# enabled, the server logs all statements that change data to the binary 
# log, which is used for backup and replication. 

I usuwamy znak komentarza "#" bądź dopisujemy poniższe parametry:

binlog-format = ROW 
expire-logs-days = 2 
log-bin="LokalnaŚcieżkaDoFolderuLogów" 

 

Purge logów starszych niż 3 dni

Wykonujemy z poziomu CLI SQL

PURGE BINARY LOGS BEFORE NOW() - INTERVAL 3 DAY; 

Wykonanie backupu wszystkich baz, każda do osobnego pliku

Na potrzeby backupu baz danych będziemy potrzebować następującego skryptu:

Wersja dla systemów linux

Tworzymy plik:

vim NazwaSkryptu.sh
#!/bin/bash 
 
USER="NazwaUseraBackupu" 
PASSWORD="HasłoBackup" 
#OUTPUT="Ścieżka zapisu plików" 

#Ewentulne usuwanie starych backupów
#rm "$OUTPUTDIR/*gz" > /dev/null 2>&1 

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" != _* ]] ; then 
        echo "Dumping database: $db" 
        mysqldump -u $USER -p$PASSWORD --databases $db > `date +%Y%m%d`.$db.sql 

       # Ewentualne packowanie plików SQL
       # gzip $OUTPUT/`date +%Y%m%d`.$db.sql 
    fi 
done 

Należy pamiętać by nadać uprawnienia do uruchamiania (atrybut x) dla pliku:

chmod +x NazwaSkryptu.sh

Wykonujemy poprzez

./NazwaSkryptu.sh

Można też oczywiście dodać to do crontab