sql >> Databáze >  >> RDS >> MariaDB

Zálohy databáze – porovnání MariaDB Mariabackup a Percona Xtrabackup

Váš databázový server uchovává některé z nejcennějších informací vašeho podniku. Zásadním zaškrtávacím políčkem je zaručit spolehlivé zálohování databáze, aby se zabránilo ztrátě dat v případě nehody nebo selhání hardwaru.

Ať už se jedná o 24x7 vysoce zatížený server nebo prostředí s nízkým objemem transakcí, budete potřebovat, aby zálohování bylo bezproblémové, aniž by došlo k narušení výkonu serveru v produkčním prostředí.

V tomto blogu se podíváme na dva nejpoužívanější nástroje pro splnění tohoto úkolu, a to Percona XtraBackup a Mariabackup. Probereme podobnosti a rozdíly mezi nimi a také způsob, jak je používat.

Co je Percona XtraBackup?

Percona XtraBackup je open source nástroj pro zálohování databází MariaDB, MySQL a Percona Server. Provádí online neblokování (pro podporované motory), pevně komprimované a zabezpečené úplné zálohy na transakčních systémech, takže aplikace zůstávají plně dostupné po dobu zálohovacího okna.

Pomocí tohoto nástroje můžete:

  • Vytvářejte horké zálohy InnoDB, které se dokončí rychle a spolehlivě, bez pozastavení databáze nebo zvýšení zátěže serveru
  • Vytvářejte přírůstkové zálohy
  • Přesouvejte tabulky mezi servery MySQL online
  • Snadno vytvářejte nové replikační slave MySQL
  • Streamujte komprimované zálohy MySQL na jiný server
  • Ušetřete místo na disku a šířku pásma sítě

Co je Mariabackup?

Mariabackup je open source nástroj poskytovaný MariaDB pro provádění fyzických online záloh. Je to fork Percona XtraBackup navržený pro práci se šifrovanými a komprimovanými tabulkami a je doporučenou metodou zálohování pro databáze MariaDB.

MariaDB Server 10.1 představil MariaDB Compression a Data-at-Rest Encryption, ale stávající řešení zálohování nepodporovala plnou zálohovací kapacitu pro tyto funkce. MariaDB se tedy rozhodla rozšířit XtraBackup (verze 2.3.8) a nazvala toto řešení Mariabackup.

Rozdíly mezi Percona XtraBackup a Mariabackup

Jak jsme již uvedli dříve, Mariabackup je doporučený nástroj pro zálohování pro MariaDB a hlavní rozdíl oproti XtraBackup je v tom, že pracuje se šifrovanými a komprimovanými tabulkami.

Každopádně, pokud z nějakého konkrétního důvodu chcete použít XtraBackup pro svou databázi MariaDB, je třeba vzít v úvahu několik bodů v závislosti na verzi serveru MariaDB, kterou máte:

  • MariaDB 10.1:S nekomprimovanými a nešifrovanými daty MariaDB můžete použít XtraBackup. Pokud se použije šifrování nebo komprese nebo když je innodb_page_size nastavena na jinou hodnotu než 16 kB, nebude to fungovat.
  • MariaDB 10.2:Můžete také zkusit použít XtraBackup, ale uvědomte si, že problémy jsou pravděpodobně způsobeny chybou nekompatibility formátu MySQL 5.7, která byla opravena v MariaDB 10.2.2. Kvůli této chybě nemusí zálohy připravené pomocí XtraBackup selhat při obnově některých transakcí. Pouze pokud server provozujete s nastavením innodb_undo_logs=1, nebude to problém.
  • MariaDB 10.3 a novější:Tento případ je jednodušší. XtraBackup není kompatibilní.

Při používání Mariabackup je také třeba vzít v úvahu některá omezení:

  • MyRocks:Počínaje MariaDB 10.2.16 a MariaDB 10.3.8 bude Mariabackup zálohovat data MyRocks Storage Engine. Částečné zálohování dat MyRocks aktuálně není podporováno. Přírůstková záloha uloží úplnou kopii dat MyRocks.
  • Funkce exportu souboru:Před MariaDB 10.2.9 Mariabackup nepodporoval funkci --export (vytváří exportní soubor pro export dat z databáze). Toto omezení můžete obejít tak, že připravíte zálohu jako obvykle (bez příznaku --export), poté spustíte server a spustíte FLUSH TABLES FOR EXPORT.
  • Soubory protokolů:Verze Mariabackup do 10.2.8 nevytvářejí prázdné soubory protokolu a spoléhají na akci --copy-back provedenou uživatelem (která odstraní staré soubory protokolu innodb, pokud existují). Pokud uživatel nepoužije --copy-back nebo se před obnovením ujistí, že datový adresář je prázdný, zálohy vytvořené pomocí těchto verzí mohou být nekonzistentní/poškozené (kvůli přítomnosti zbylých protokolů InnoDB).
  • Gcrypt:Šifrování založené na nástroji zálohování (gcrypt) není na Mariabackup podporováno.
  • Volba Innobackupex:Žádný symbolický odkaz na innobackupex (místo toho použijte parametr --innobackupex). Nástroj innobackupex opravuje a poskytuje další funkce oproti nástroji innobackup pro zálohování tabulek InnoDB a MyISAM.
  • Kompaktní varianta:--kompaktní volba není podporována.
  • Volba znovu vytvořit indexy:Volba --rebuild_indexes není podporována.
  • Tar pro záložní soubory:Podpora --stream=tar byla odstraněna v Mariabackup 10.1.24 (Možnosti --streams streamují záložní soubory do stdout).

V neposlední řadě lze Mariabackup nainstalovat na Windows.

Proces zálohování Proces obnovení

Jak na to – Percona XtraBackup a Mariabackup

Podívejme se, jak jej můžeme nainstalovat a používat.

Instalace

Máte různé způsoby instalace XtraBackup a Mariabackup. Zkusme instalaci z repozitářů.

Instalace XtraBackup

V systému Debian/Ubuntu
$ wget https://repo.percona.com/apt/percona-release_0.1-6.$(lsb_release -sc)_all.deb
$ sudo dpkg -i percona-release_0.1-6.$(lsb_release -sc)_all.deb
$ sudo apt-get update
$ sudo apt-get install percona-xtrabackup-24
Na RedHat/CentOS
$ sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm
$ sudo yum install percona-xtrabackup-24

Instalace Mariabackup

V systému Debian / Ubuntu

Mariabackup je součástí serveru MariaDB počínaje verzí MariaDB 10.1.23.

$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.1/ubuntu bionic main'
$ sudo apt-get update
$ sudo apt-get install mariadb-server-10.1
Na CentOS / RedHat
$ sudo vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name=MariaDB
baseurl=http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
$ sudo yum install MariaDB-backup

Konfigurace

Xtrabackup i Mariabackup čtou sekce [mysqld] a [xtrabackup] libovolného konfiguračního souboru MySQL v tomto pořadí. Tímto způsobem může číst parametry MySQL, jako jsou parametry datadir nebo InnoDB.

Parametry obsažené v sekci [mysqld] můžeme upravit úpravou jejich hodnoty v [xtrabackup], jak jsme již zmínili, čtou se v pořadí, takže poslední věc, kterou máme v [xtrabackup], bude mít prioritu.

[mysqld]
datadir=/data/datadir
[xtrabackup]
target_dir=/backups/

Uživatel s minimálními oprávněními požadovanými pro úplné zálohování by byl RELOAD, LOCK TABLES, PROCESS a REPLICATION CLIENT:

mysql> CREATE USER 'backupuser'@'localhost' IDENTIFIED BY 'Password';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'backupuser'@'localhost';

A poté můžete tohoto uživatele přidat do konfiguračních souborů MySQL:

[xtrabackup]
user=backupuser
password=Password

Můžete také použít Xtrabackup nebo Mariabackup k provedení přenosu stavu snímku, když používáte cluster Percona XtraDB nebo MariaDB Galera Cluster. V konfiguračních souborech musíte nastavit proměnné wsrep_sst_method a wsrep_sst_auth:

[mysqld]
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=backupuser:Password

Nebo

[mysqld]
wsrep_sst_method=mariabackup
wsrep_sst_auth=backupuser:Password

Použití

Vzhledem k tomu, že Mariabackup je založen na XtraBackup, lze jej použít podobně.

Nyní se podívejme na příklad použití obou metod k vytvoření, přípravě a obnovení úplné zálohy.

Vytvoření zálohy

Chcete-li vytvořit novou zálohu pomocí XtraBackup nebo Mariabackup, musíte do příkazového řádku přidat volby --backup a --target-dir:

$ xtrabackup --backup --target-dir=/backups/

Nebo

$ mariabackup --backup --target-dir=/backups/

Cílový adresář, kam bude záloha uložena, lze zadat v konfiguračních souborech MySQL. Proces zálohování nepřepíše existující soubory. Pokud soubor existuje, záloha selže.

Transaction log of lsn (9755450) to (9755467) was copied.
181122 23:02:44 completed OK!

Pokud vše proběhlo v pořádku, poslední řádek, který vidíte, by měl být "dokončeno OK!". Zálohu můžete kdykoli zrušit, protože nemění obsah databáze.

[[email protected] ~]# ls -l /backups/
total 102448
-rw-r----- 1 root root       488 Nov 22 23:02 backup-my.cnf
-rw-r----- 1 root root       482 Nov 22 23:02 ib_buffer_pool
-rw-r----- 1 root root 104857600 Nov 22 23:02 ibdata1
drwxr-x--- 2 root root      4096 Nov 22 23:02 mysql
drwxr-x--- 2 root root      4096 Nov 22 23:02 performance_schema
drwxr-x--- 2 root root      4096 Nov 22 23:02 sakila
drwxr-x--- 2 root root     12288 Nov 22 23:02 sys
-rw-r----- 1 root root        64 Nov 22 23:02 xtrabackup_binlog_info
-rw-r----- 1 root root       113 Nov 22 23:02 xtrabackup_checkpoints
-rw-r----- 1 root root       533 Nov 22 23:02 xtrabackup_info
-rw-r----- 1 root root      2560 Nov 22 23:02 xtrabackup_logfile

Toto by měl být obsah vaší zálohy. Může se změnit v závislosti na vašich databázích.

Příprava zálohy

Když máte zálohu vytvořenou pomocí XtraBackup nebo Mariabackup, musíte ji připravit k obnovení. Datové soubory nejsou konzistentní, dokud nejsou připraveny, protože byly zkopírovány v různých časech během trvání zálohy. Pokud se ji pokusíte obnovit a spustit databázi, detekuje poškození a sama se zhroutí, aby vám zabránila spustit na nekonzistentních datech.

Pro přípravu zálohy musíte spustit příkaz xtrabackup nebo mariabackup s volbou --prepare a zadat cílový adresář, kde je záloha uložena.

$ xtrabackup --prepare --target-dir=/backups/

Nebo

$ mariabackup --prepare --target-dir=/backups/
InnoDB: Shutdown completed; log sequence number 9757224
181122 23:05:29 completed OK!

Poslední řádek, který uvidíte, by měl být "Vypnutí dokončeno; zaznamenat pořadové číslo xxxxxxx" a "dokončeno OK!" kdyby vše proběhlo v pořádku. Nedoporučuje se zrušit proces přípravy, protože to může způsobit poškození datového souboru a záloha se stane nepoužitelnou.

Pokud chcete později použít tuto zálohu s přírůstkovou zálohou, měli byste při její přípravě použít možnost --apply-log-only, jinak to nebudete moci provést.

Obnovení zálohy

Po přípravě zálohy můžete pomocí možnosti obnovení s parametry --copy-back nebo --move-back zkopírovat nebo přesunout zálohu do datadir. Pokud nemáte dostatek místa na disku, pravděpodobně byste měli použít možnost přesunout. Také musíme zadat cílový adresář, kde je záloha uložena. Mějte na paměti, že před obnovením zálohy musí být datadir prázdný a databázová služba by měla být mimo provoz.

$ xtrabackup --copy-back --target-dir=/backups/

Nebo

$ mariabackup --copy-back --target-dir=/backups/

Nejprve zkopíruje/přesune tabulky a indexy MyISAM, dále tabulky a indexy InnoDB a nakonec soubory protokolu. Při kopírování zachová atributy souboru, možná budete muset před spuštěním databázového serveru změnit vlastnictví souborů na mysql, protože je bude vlastnit uživatel, který vytvořil zálohu.

$ sudo chown -R mysql:mysql /var/lib/mysql

S Xtrabackup a Mariabackup lze použít několik parametrů. Tyto parametry můžete zkontrolovat zde pro XtraBackup a zde pro Mariabackup.

ClusterControlSingle Console pro celou vaši databázovou infrastrukturu Zjistěte, co je ještě nového v ClusterControl Nainstalujte ClusterControl ZDARMA

Správa záloh na ClusterControl

Jak jsme viděli výše, spuštění zálohy není žádná velká věda. Lze to naplánovat i pomocí cronu (ale pozor na tichá selhání!). Skript pro pravidelné vytváření záloh však není řešením správy záloh. Potřebujete způsob, jak hlásit své zálohy a upozorňovat na selhání. To, že nakonfigurujete zálohy ve vašem prostředí a uvidíte, že zálohy fungují bez chyb, neznamená, že je vše v pořádku. Možná jste slyšeli o Schrödingerově záloze, která uvádí, že stav jakékoli zálohy není znám, dokud se nepokusí o obnovení. Protože nejhorší věc, která se může stát, je katastrofa a vy si uvědomíte, že zálohy jsou z nějakého důvodu špatné. Pokusíte se obnovit soubory, které byly zálohovány, a neobnoví to, co si myslíte, že jste zálohovali, nebo se neobnoví vůbec! Pak jsou tu věci jako přesun záložních souborů mimo pracoviště, např. na externí cloudové úložiště pro obnovu po havárii. Pro bezpečnost je důležité šifrování a manipulace s klíči. Uchovávání místních i externích/archivovaných záloh je také potřeba spravovat.

Podívejme se, jak může ClusterControl pomoci.

Chcete-li použít funkci ClusterControl Backup, přejděte na ClusterControl -> Select Cluster -> Backup a tam můžete vidět své aktuální zálohy, vytvořit nebo naplánovat nové.

ClusterControl Backup Section

Pomocí možnosti vytvořit nebo naplánovat můžeme zvolit obojí, metodu XtraBackup nebo Mariabackup. Ve stejné sekci si můžeme vybrat server, ze kterého zálohu vezmeme, povolit částečné zálohování, vybrat, kam chcete zálohu uložit a jestli chcete zálohu nahrát do cloudu (AWS, Azure nebo Google Cloud).

ClusterControl Vytvořit zálohu 1

Poté můžeme vybrat parametry zálohování, jako je komprese, šifrování a uchovávání.

ClusterControl Create Backup 2

A toto by měly být příkazy, které ClusterControl spustí za vás:

[16:37:58]: 192.168.100.120: Launching ( LC_ALL=C /usr/bin/innobackupex --defaults-file=/etc/my.cnf --galera-info --parallel 1 --stream=xbstream --no-timestamp . | gzip -6 - > /root/backups/BACKUP-13/backup-full-2018-11-14_193757.xbstream.gz ) 2>&1.

Nebo

[16:29:57]: 192.168.100.131: Launching ( LC_ALL=C /usr/bin/mariabackup --defaults-file=/etc/my.cnf --backup --galera-info --parallel 1 --stream=xbstream --no-timestamp | gzip -6 - > /root/backups/BACKUP-11/backup-full-2018-11-14_192957.xbstream.gz ) 2>&1.

Tento příkaz se může lišit v závislosti na zvolených parametrech.

Jak jsme mohli vidět, ClusterControl je dobrý přítel, pokud chceme používat XtraBackup nebo Mariabackup. Složité příkazy zálohování můžeme spouštět jednoduchým způsobem, výběrem možností z uživatelského rozhraní ClusterControl.
ClusterControl podporuje úplné i přírůstkové zálohování, takže můžeme konfigurovat veškerou naši strategii zálohování z přátelského uživatelského rozhraní.

Závěr

Při zálohování serveru MariaDB se doporučuje použít nástroj Mariabackup. Pokud však z nějakého důvodu dáváte přednost použití XtraBackup, stále můžete. Ale musíte mít na paměti omezení, která platí, jak jsme poznamenali v tomto blogu. A nakonec jsme diskutovali o tom, že skript pro zálohování databáze není to samé jako řešení správy zálohování, a krátce jsme se podívali na ClusterControl.

Dejte nám vědět, pokud jsme přehlédli nějaké rozdíly mezi XtraBackup a MariaBackup.

Neblokující zálohy jsou podporovány pro úložiště InnoDB, XtraDB a HailDB. Krátkým pozastavením zápisu na konci zálohování lze zálohovat následující úložné stroje:MyISAM, Merge a Archive, včetně dělených tabulek, spouštěčů a možností databáze.


  1. Jak funguje funkce RIGHT() v MySQL

  2. Změna existujícího sloupce na vypočítaný sloupec na serveru SQL (příklad T-SQL)

  3. Jaký je smysl počátečního katalogu v připojovacím řetězci SQL Server?

  4. Jak v PHP s PDO zkontrolovat finální parametrizovaný dotaz SQL?