Tworzenie kopii zapasowej MySQL za pomocą narzędzia XtraBackup

Percona XtraBackup — to narzędzie do gorącego tworzenia kopii zapasowych baz danych MySQL.

Podczas tworzenia kopii zapasowej danych nie dochodzi do blokowania tabel, a Twój system działa bez jakichkolwiek ograniczeń.

XtraBackup 2.4 może tworzyć kopie zapasowe tabel InnoDBXtraDB i MyISAM na serwerach MySQL 5.11, 5.5, 5.6 i 5.7, a także na serwerze Percona do MySQL z XtraDB.

Aby pracować z MySQL 8.x należy korzystać z wersji XtraBackup 8.x. W tym artykule omówimy tylko XtraBackup 2.4.

Największa zaleta XtraBackup objawia się tym, że to narzędzie nadaje się zarówno do tworzenia kopii zapasowych wysoko obciążonych serwerów, jak i dla systemów z małą liczbą transakcji.

Jeśli całkowity rozmiar Twoich baz danych MySQL jest znaczny (dziesiątki gigabajtów), standardowe narzędzie mysqldump nie umożliwi szybkiego wykonania kopii zapasowej, a przywrócenie zrzutu zajmie dużo czasu.

Instalacja

Instalacja XtraBackup z repozytorium apt Percona.

Wykonaj kolejno następujące komendy:

wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb

sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb

sudo apt-get update 

sudo apt-get install percona-xtrabackup-24

2. Po instalacji wykonaj komendę xtrabackup -v. Ważne jest, aby upewnić się, że narzędzie działa prawidłowo na serwerze. W rezultacie na ekranie pojawi się coś takiego:

xtrabackup: rozpoznane argumenty serwera: — datadir=/var/lib/mysql — tmpdir=/tmp — server-id=1 — logbin=/var/log/mysql/mysql-bin.log — innodbbufferpoolsize=16384M — innodbfilepertable=1 — innodbflushmethod=Odirect — innodbflushlogattrxcommit=0xtrabackup version 2.4.20 na podstawie serwera MySQL 5.7.26 Linux (x8664) (id rewizji: c8b4056)

Tworzenie kopii zapasowej MySQL za pomocą narzędzia XtraBackup

Uprawnienia, pozwolenia i przywileje 

XtraBackup musi mieć możliwość:

  • Połączyć się z Twoim serwerem MySQL.

  • Posiadać uprawnienia do katalogu datadir

  • Podczas tworzenia kopii zapasowej mieć prawa do zapisu w określonym przez parametr target-dir katalogu.

Co to jest katalog datadir?

datadir — to katalog, w którym serwer baz danych MySQL przechowuje dane. Wszystkie bazy danych, wszystkie tabele znajdują się tam. W większości dystrybucji Linux domyślnie takim katalogiem jest /var/lib/mysql.

Co to jest katalog target-dir?

target-dir — to katalog, w którym zostanie zapisane kopia zapasowa.

Użytkownik bazy danych potrzebuje następujących uprawnień do tabel i baz danych, które mają być kopiowane:

  • RELOAD i LOCK TABLES

  • REPLICATION CLIENT

  • CREATE TABLESPACE

  • PROCESS

  • SUPER

  • UTWÓRZ

  • INSERT

  • SELECT

Konfiguracja 

Konfiguracja XtraBackup jest realizowane za pomocą opcji, które działają tak samo, jak standardowe parametry MySQL.

Co to oznacza?

Parametry konfiguracyjne mogą być określone zarówno w wierszu poleceń, jak i w pliku konfiguracyjnym bazy danych, na przykład w /etc/my.cnf.

Narzędzie XtraBackup po uruchomieniu odczytuje sekcje [mysqld] i [xtrabackup] z plików konfiguracyjnych MySQL. Robi to, aby narzędzie mogło korzystać z ustawień bazy danych bez konieczności ręcznego wprowadzania parametrów przy każdym tworzeniu kopii zapasowej.

Na przykład wartość datadir i niektóre parametry InnoDB XtraBackup otrzymujemy z konfiguracji bazy danych.

Jeśli chcesz nadpisać parametry dla działania XtraBackup, które znajdują się w sekcji [mysqld], po prostu określ je w pliku konfiguracyjnym w sekcji [xtrabackup]. Ponieważ będą one odczytane później, będą miały wyższy priorytet.

Możesz nie dodawać żadnych parametrów do my.cnf. Wszystkie wymagane parametry można określić w wierszu poleceń. Zazwyczaj jedyną rzeczą, którą warto umieścić w sekcji [xtrabackup] twojego my.cnf — jest parametr target_dir, który domyślnie określa katalog, do którego będą umieszczane kopie zapasowe. Ale to nie jest konieczne.

Przykład określenia ścieżki do katalogu z kopią zapasową w my.cnf:

[xtrabackup]
target_dir = /data/backups/mysql/

Skrypt tworzenia kopii zapasowej

Aby utworzyć kopię zapasową, można użyć następującego skryptu:

#!/bin/bash

# Удаляем данные в каталоге бекапа
rm -rf /mysql/backup

# Cоздаём бекап
xtrabackup --user=xtrabackup 
 --password=xxxx_SECRET_xxxx 
 --backup 
 --target-dir=/mysql/backup

# Выполняем подготовку бекапа для развёртывания
xtrabackup --prepare --target-dir=/mysql/backup

# Создаём архив
tar -zcvf /home/developer/dumps/xtrabackup-all-dbs-"$(date +%F-%H:%M:%S)".gz /mysql/backup

Co się dzieje podczas wykonywania skryptu?

Na początku czyścimy (usuwamy) katalog, w którym będziemy przechowywać kopię zapasową:

rm -rf /mysql/backup.

Następnie, za pomocą narzędzia XtraBackup tworzymy kopię zapasową i zapisujemy ją w /mysql/backup/:

xtrabackup --user=xtrabackup --password=xxxxz1cYf95550Gc6xxxxxxxpE3rB03xxxx --backup --target-dir=/mysql/backup

Wcześniej w MySQL stworzyliśmy użytkownika xtrabackup z wymaganymi uprawnieniami. Za pomocą parametru target-dir określamy katalog, w którym należy przechować kopię zapasową.

Ważna sprawa!

Zwróć uwagę na linię skryptu:

xtrabackup --prepare --target-dir=/mysql/backup

Dane w katalogu /mysql/backup nie są spójne, dopóki nie zostaną przygotowane. 

Chodzi o to, że podczas kopiowania plików mogły zajść zmiany. Operacja xtrabackup --prepare --target-dir=/mysql/backup czyni dane kopii zapasowej idealnie zgodnymi czasowo.

Operację przygotowania danych można przeprowadzić na dowolnej maszynie. Nie ma potrzeby, aby robić to na serwerze, gdzie znajduje się pierwotna baza danych. Możesz skopiować kopię zapasową na docelowy serwer i przygotować ją tam.

Ostatnie, co robimy, to tworzymy archiwum, do którego umieszczamy naszą kopię zapasową:

tar -zcvf /home/developer/dumps/xtrabackup-all-dbs-«$(date %F%H%M%S)».gz /mysql/backup

Przywracanie kopii zapasowej 

Zanim rozpoczniesz przywracanie kopii zapasowej na docelowym serwerze, dane muszą przejść przez etap przygotowania. Jak to zrobić, zobacz powyżej.

Proces przywracania danych jest bardzo prosty. Musisz wydobyć kopię zapasową z archiwum i zastąpić dane w datadir.

Jak zastąpić dane w datadir?

Rozważmy dwie opcje.

Opcja 1

Skorzystać z narzędzia XtraBackup. Należy określić opcję --copy-back

Poniższe polecenie przeniesie kopię zapasową do datadir docelowego serwera:

xtrabackup --copy-back --target-dir=/mysql/backup

Opcja 2

Można również postąpić inaczej, obejść się bez narzędzia XtraBackup.

Wszystko, co musisz zrobić, to skopiować kopię zapasową do datadir. Możesz to zrobić za pomocą cp lub rsync.

Ważne jest, aby zrozumieć, że procedura przywracania kopii zapasowej sprowadza się jedynie do zastąpienia zawartości katalogu datadir.

Przed rozpoczęciem przywracania kopii zapasowej na docelowym serwerze należy:

  • Zatrzymać serwer MySQL.

  • Wyczyścić folder datadir lub przenieść jego zawartość w inne miejsce. Katalog datadir musi być pusty.

Po zakończeniu przenoszenia danych do datadir serwer MySQL można uruchomić.

Używane materiały

Oficjalna dokumentacja Percona XtraBackup.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster