# MySQL | MariaDB

# Tworzenie usera na potrzeby backupu CLI

Wykonujemy zalogowani do CLI mysql/mariadb jako root

<span class="TextRun SCXO177821117 BCX8" data-contrast="none" lang="YO-NG" xml:lang="YO-NG"><span class="NormalTextRun SCXO177821117 BCX8">Tworzenie usera pod </span></span><span class="TextRun SCXO177821117 BCX8" data-contrast="none" lang="YO-NG" xml:lang="YO-NG"><span class="NormalTextRun SCXO177821117 BCX8">backup</span></span><span class="TextRun SCXO177821117 BCX8" data-contrast="none" lang="YO-NG" xml:lang="YO-NG"><span class="NormalTextRun SCXO177821117 BCX8">:</span></span>

```sql
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:

```sql
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

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

Lokalizacja dla MariaDB

```powershell
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:

```powershell
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

```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:

```bash
vim NazwaSkryptu.sh
```

```bash
#!/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:

```bash
chmod +x NazwaSkryptu.sh
```

Wykonujemy poprzez

```bash
./NazwaSkryptu.sh
```

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